在多个服务器上保留websocket连接对象

时间:2017-11-23 04:23:36

标签: node.js sockets websocket web-chat

我在服务器上使用websocket库来建立套接字连接。

https://github.com/websockets/ws

我在群集中有一个以上的服务器,我想知道如何在群集中的另一台服务器上使用相同的套接字连接对象。

而且我想知道webchat实现原生websocket或socket.io

的最佳选择

1 个答案:

答案 0 :(得分:1)

您不能在多个服务器上使用相同的实际套接字对象。套接字对象表示客户端和一个物理服务器进程之间的套接字连接。可以构建一个虚拟套接字对象,该对象将知道其连接所在的服务器,向该服务器发送消息,然后通过该实际套接字从该另一个服务器发送出去。

socket.io/redis adapter就是这样一种虚拟方式。您设置了node.js集群,并将redis适配器与socket.io一起使用。它使用基于redis的中央存储来跟踪每个物理连接的服务进程。然后,当您想要从任何服务器进程向特定客户端发送消息时,您通过socket.io发送该消息,它在redis数据库中查找该套接字连接的那个,联系实际服务器并询问它通过当前存在于该其他服务器进程上的socket.io连接将消息发送到该特定客户端。同样,您可以向套接字组广播,它将完成所有工作,确保无论连接到哪个实际服务器,消息都会传递给客户端。

你可以自己为普通的webSocket连接构建类似的东西,而其他人已经构建了它。我对野外存在的内容并不熟悉,无法为简单的webSocket提供任何建议。有plenty of articles横向扩展webSocket服务器,您可以通过Google找到这些服务器,如果您想使用普通的webSocket进行读取,请先阅读。