使用群集模块(PM2& Forever)时,负载均衡Web套接字似乎是一个问题:
https://github.com/Unitech/pm2/issues/81
https://stackoverflow.com/a/28075728/275491
此链接讨论"粘性负载平衡"与websockets相关的集群模块: http://socket.io/docs/using-multiple-nodes/
有些客户可能有一个像WebSocket这样的主动双向通信渠道,我们可以立即写入,但其中一些可能正在使用长轮询。
如果他们使用长轮询,他们可能会或可能不会发送我们可以写入的请求。他们可能“介于”这些请求之间。在这些情况下,这意味着我们必须在此过程中缓冲消息。为了让客户在发送请求时成功声明这些消息,最简单的方法是让他连接到路由到同一个进程。
N | Solid是否也解决了与群集模块相关的问题,即具有进程关联性的负载平衡websockets?
答案 0 :(得分:1)
nginx
可以更好地完成websockets的负载平衡任务,因为您可以更灵活地存储会话信息(可以在redis上),并可以根据需要轻松扩展更多流程或更多机器。
在这方面,N | Solid的行为与Node.js相同
正如您所提到的,“粘性会话”是一种处理此问题的方法。在Redis实例或您的进程可以同步的其他数据存储上存储和管理会话信息,您可以将正确的会话路由到正确的进程。
出于性能原因,群集模块不会在进程之间共享内存,因此,最好的方法是使用粘性会话,让平衡器使用会话信息决定路由。粘性会话还使得任何进程都可以从会话存储中获取相同的信息。