1

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

https://github.com/websockets/ws

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

而且我还想知道网络聊天实现本机 websocket 或 socket.io 的最佳选择是什么

4

1 回答 1

2

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

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

您当然可以自己为普通的 webSocket 连接构建类似的东西,而其他人已经构建了它的一部分。我对野外存在的东西不够熟悉,无法为普通的 webSocket 提供任何建议。有很多关于水平扩展 webSocket 服务器的文章,你可以在谷歌上找到这些文章,如果你想用一个普通的 webSocket 来做的话,可以阅读这些文章来开始。

于 2017-11-23T06:14:55.270 回答