让我们有一个具有实时聊天功能的应用程序。聊天需要websockets来实现实时功能。
现在假设我们有“平衡器”和3台应用服务器。在每个服务器上运行应用程序实例。
平衡器委托给这3台服务器中的1台,例如基于流量。
我的问题是,如何处理websockets?示例:
1) User A logs into an applicition
2) Balancer delegates user A to server 1
3) Web socket is created for user A on server 1
4) User B logs into an applicition
5) Balancer delegates user B to server 3
6) Web socket is created for user B on server 3
7) User A wants to set message to user B
8) Instance of application on server 1 looks for web sockes for user B用户B的Web套接字存在于服务器3,而不是服务器1。
如何处理这种情况?应该在应用程序级别(例如,通过数据库/消息同步应用程序实例)还是在“平衡器”上进行一些配置?
谢谢你帮忙。
发布于 2018-08-15 17:00:35
除非你事先知道谁想和谁沟通,否则你将无法在平衡器级别上解决这个问题。如果用户必须在连接之前选择聊天室,您可以为每个会话分配一个固定的服务器(根据一个确定性函数计算它,以聊天室ID/名称为参数,给出一个服务器实例作为结果)。
否则,将发布订阅模式中的所有应用程序服务器互连。如果User A发送消息给Server 1 for User B,但是这个用户没有连接到服务器,那么它应该用topic User B将消息转发到发布子网络。如果另一台服务器(如Server 3 )连接到User B,则订阅主题User B并将消息推送给该用户。
这基本上就是发生的事情:
https://softwareengineering.stackexchange.com/questions/376922
复制相似问题