多个websockets到多个服务器上:它们如何通信?

时间:2017-06-04 09:58:42

标签: node.js websocket multiprocessing

我有一个节点服务器接受来自客户端的websocket连接。每个客户端都可以向所有其他客户端广播消息。

更新:我使用https://github.com/websockets/ws作为我的首选图书馆。

目前,服务器有一个包含所有连接的数组。每个连接都有一个tabId。当其中一个客户端发出消息时,我会检查所有连接并检查:如果连接的tabId不匹配,我会将消息发送给客户端。

对于加载问题,我面临着必须拥有多个服务器的问题。所以,会有两个服务器,每个服务器都有许多客户端。

如何确保将消息广播到所有的websocket客户端,而不仅仅是连接到同一服务器的消息?

我认为一种可能的解决方案是将连接存储在数据库中,其中每条记录都有tabId serverId。然而,即使是简单的广播也会变得棘手,因为消息传递给了本地"套接字很容易广播(套接字是本地的和可用的)而消息是"远程"套接字很棘手,并且意味着服务器内部的通信。

有一个好的模式来解决这个问题吗?当然,这是人们每天都面临的事情。

1 个答案:

答案 0 :(得分:0)

您可以使用RabbitMQ之类的消息队列。

当客户端登录到您的服务器时,创建一个侦听队列的使用者,该队列将接收定向到该特定客户端的消息。当客户端发送消息时,只需使用发布者将它们发布到收件人队列。

这种方式并不重要,您无需知道客户端在哪个节点上,或者是否从节点跳转到另一个节点。