为了账号安全,请及时绑定邮箱和手机立即绑定

分布式环境下单点通信的问题

非常感谢老师的讲解,但是还有个疑问:

在分布式环境下如何进行单点通信?

并不知道目标用户被分配在哪个服务器上

一有消息就向全部服务器推送?

正在回答

1 回答

    HI同学,向单个用户推送不建议广播gateway。

会话层

    这个架构需要继续演进,允许长连接认证(auth),这样每个长连接就对应一个用户ID(uid)。

    当我们要给某个uid推送的时候,需要知道uid对应的长连接在哪些服务器上,所以我们需要实现一个会话层(session layer),最简单的就是搭建一套redis cluster,把uid与gateway之间的关系记录下来,然后基于客户端心跳,去redis cluster中做刷新,避免关系过期。

    当我们要给uid推送时,可以由logic去session层获取uid所在gateway,然后定向推送到对应gateway,避免集群内广播。

登录

    实际工程中,我们不会把帐号密码登录放在gateway里实现,而是写一个单独的认证服务(一般会与公司的账号系统打通),完成认证后发放一个生命期很短的TOKEN,比如JWT,这个TOKEN是可以自验证的。

    客户端拿着token建到gateway的连接,然后auth提交token,由gateway直接验证有效,完成会话的建立。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

分布式环境下单点通信的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信