我有一个生成股票代码数据的流源S.
我想将S集成到使用socket io的节点应用程序中。我的应用程序在生产中的多服务器环境中运行,让我们说服务器A和B.
最初,我以为我会这样做:
在A和B上使用socket io redis适配器:https://github.com/socketio/socket.io-redis。
将A和B连接到S,只需让A和B处理从S发出的数据块,只需将块播放到适当的房间即可。
然而,在考虑了这一点之后,我意识到我可能会遇到一个问题,即A和B都向客户端广播相同的数据(并且客户端接收相同信息的副本)。我正确地考虑了这个吗?我怎么能避免这个?
答案 0 :(得分:1)
一个客户端必须连接到一个服务器,并且同一个连接在同一服务器上保持打开状态,它称为会话粘性,他不会打开两个连接。为此,您应该使用代理作为服务器池上的负载均衡器,例如,您可以使用nginx。
您所要做的就是在服务器之间同步房间,以便正确地向房间中的所有用户广播(因为某些用户将在服务器A上的房间中,而在服务器B上的其他用户中)。
有关nginx和websockets的文档: https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/
希望有所帮助