请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

第七章中,将conn和userid存放于本地的map中便于管理

第七章中,将conn和userid的对应关系存放于本地的map中便于管理,如果ws服务是多个实例,在这种场景下,该怎样去协调链接和userId的对应关系呢?业务该怎么优化呢?

正在回答 回答被采纳积分+3

插入代码

1回答

木兮QwQ 2025-01-02 11:49:47
这个问题挺好,对于当前的ws来说来接肯定是需要在本地记录的,但如果在多节点上我们可以基于redis将用户与服务绑定,在课程的9-8就有讲到该问题的方案。
0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕瓜0305086 #1
    嗯嗯看到了。有一个小问题,服务端的这段转发代码是否是必要的呢?func (s *Server) SendByUserId(msg interface{}, uIds ...string) error {
    
    	if len(uIds) == 0 {
    		return nil
    	}
    
    	conns, noExistUids := s.GetConns(uIds...)
    	err := s.Send(msg, conns...)
    	if err != nil {
    		return err
    	}
    
    	return s.serverOption.discover.Transpond(msg, noExistUids...)
    
    }
    chat是通过mq解耦的,是否可以只在mq推送消息给ws server时增加转发逻辑(也就是只在ws的client端增加转发的逻辑),这样的话如果一个ws server收到消息,则该server上就一定存在ws conn ,所以ws server端就不用在增加转发逻辑了。
    回复 有任何疑惑可以回复我~ 2025-01-23 19:12:36
  • 木兮QwQ 回复 提问者 weixin_慕瓜0305086 #2
    在我们目前的流程上,已经为client增加了转发,因此在mq中使用client的时候就会转发相应的服务。
    而在server中的转发应client转发相应应用较少,它适合于在没有使用mq流程的时候。
    回复 有任何疑惑可以回复我~ 2025-01-26 15:54:42
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号