用redis水平缩放socket.io

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

LoadBalancer (nginx) Proxy1 Proxy2 Proxy3 Proxy{N} BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N} 

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

       

网上收集的解决方案 "用redis水平缩放socket.io"

当你要扩展socket.io服务器,并且你已经使用nginx作为负载平衡器的时候,不要忘记设置sticky load balancing ,其他的单连接将连接到多个服务器,基于负载平衡器将连接传递给socket.io服务器。 所以更好使用sticky load balancing

使用Redis Pub/Sub implementation套接字io适配器,您可以借助Redis Pub/Sub implementation来发送和接收带有一个或多个socket.io服务器的消息。

如果你告诉我哪个技术用于代理和后端,我会让你知道更多的信息。

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

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

而不是粘滞的会话,你可以改变你的客户端连接optons只使用Websockets,这将消除多个连接到多个服务器的问题,因为只有一个连接,单个websocket。 这也将使您的应用程序失去降级到长轮询而不是WebSockets的能力。