tinode登录后的sub

登录后的sub消息被一个单独的routine处理了

  1. server/session.go
    	globals.hub.join <- &sessionJoin{
    		topic: expanded,  //me
    		pkt:   msg, // 原始消息
    		sess:  s}
    
  2. server/hub.go, 启动了一个单独的goroutine
    	func newHub() *Hub {
    		...
    		go h.run() // 在这里面有个go topicInit(t, sreg, h), topic的
    		...
    	}
    
  3. server/main.go, 在main中就启动了新的goroutine
    globals.hub = newHub()
    

hub对sub消息的处理

  1. server/hub.go, 把sub的原始消息又塞入了原始消息的topic me
    	for {
    		select {
    			case sreg := <-h.join:     // 这个sreg在上面的第一步就塞进来了
    				t := h.topicGet(sreg.topic) 
    					if t==nil{
    						....
    					}else {
    						t.reg<-sreg        // 塞入了原始消息的topic `me`
    					}
    		}
    
  2. server/hub.go,启动topic的routine
    	func (h *Hub) run() {
    		go topicInit(t, sreg, h)
    	}
    	
    

被topic的routine处理

  1. server/init_topic.go,
    	func topicInit(t *Topic, sreg *sessionJoin, h *Hub) {
    		go t.run(h)  // 一个topic的循环处理
    }
    
  2. server/topic.go
    func (t *Topic) run(hub *Hub) {
    		...
    		case sreg := <-t.reg:
    			 t.handleSubscription(hub, sreg); // 真正的处理sub消息
    		...
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值