Node.js 使用redis水平缩放socket.io

Node.js 使用redis水平缩放socket.io,node.js,redis,socket.io,scaling,socket.io-redis,Node.js,Redis,Socket.io,Scaling,Socket.io Redis,我目前正在创建一个水平可扩展的socket.io服务器,如下所示: LoadBalancer (nginx) Proxy1 Proxy2 Proxy3 Proxy{N} BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N} 我的问题是,使用socket io redis模块,如果某个后端服务器都连接到同一个redis服务器,我是否可以从其中一个后端服务器向连

我目前正在创建一个水平可扩展的socket.io服务器,如下所示:

                 LoadBalancer (nginx)

      Proxy1      Proxy2      Proxy3      Proxy{N}

 BackEnd1   BackEnd2   BackEnd3   BackEnd4   BackEnd{N}

我的问题是,使用socket io redis模块,如果某个后端服务器都连接到同一个redis服务器,我是否可以从其中一个后端服务器向连接到其中一个代理服务器的特定套接字发送消息?如果是这样,我该怎么做?

当您想要扩展socket.io服务器,并且您已经使用nginx作为负载平衡器时,请不要忘记设置
粘性负载平衡
,其他单个连接将基于负载平衡器连接到多个服务器。将连接传递到socket.io服务器。因此最好使用
粘性负载平衡

使用redis socket io适配器,您可以在redis Pub/Sub实现的帮助下,通过一个或多个socket.io服务器发送和接收消息


如果您告诉我代理和后端使用哪种技术,我会告诉您有关这方面的更多信息。

使用socket.io-redis模块,您的所有后端服务器将共享相同的连接用户池。您可以从后端1发出消息,如果客户机连接到后端4,他将收到消息

使用Socket.io实现这一点的关键是在nginx上使用粘性会话,这样一旦我的客户端连接,它就可以保持在同一台机器上。这是因为socket.io从一个WebSocket和几个长轮询线程开始,它们都需要在同一个后端服务器上才能正常工作


代替粘性会话,您可以将客户端连接选项更改为仅使用websocket,这将消除多个服务器的多个连接的问题,因为只有一个连接,即单个websocket。这也会使你的应用程序失去降级为长轮询而不是WebSocket的能力

所有服务器都使用Node.js,我只是想问,如果它们都连接到同一个redis商店,如何从一个后端服务器发送到客户端。嘿,谢谢你的回复。出于某种原因,这对我来说仍然不起作用。你能看一下这条线并告诉我最好的方法吗?