Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在docker swarm环境中处理套接字连接_Node.js_Docker_Socket.io_Docker Swarm - Fatal编程技术网

Node.js 如何在docker swarm环境中处理套接字连接

Node.js 如何在docker swarm环境中处理套接字连接,node.js,docker,socket.io,docker-swarm,Node.js,Docker,Socket.io,Docker Swarm,我正在构建一个Web应用程序,使用nodejs作为服务器,Docker Swarm处理复制和负载平衡 现在,我需要处理客户端和复制服务器之间的实时数据更新,所以我想到使用Socket.IO来处理连接。所有请求都通过一个NGINX服务器传递,该服务器将其重定向到swarm的manager节点,并由him处理平衡。 由于网络的拓扑结构可以根据网络负载快速变化,我不愿让NGINX处理平衡和应用粘性会话。。。(也许我错了) 根据我对该设置的理解,如果客户端连接到我的服务器,docker的负载平衡器将向我

我正在构建一个Web应用程序,使用nodejs作为服务器,Docker Swarm处理复制和负载平衡

现在,我需要处理客户端和复制服务器之间的实时数据更新,所以我想到使用Socket.IO来处理连接。所有请求都通过一个NGINX服务器传递,该服务器将其重定向到swarm的manager节点,并由him处理平衡。 由于网络的拓扑结构可以根据网络负载快速变化,我不愿让NGINX处理平衡和应用粘性会话。。。(也许我错了)

根据我对该设置的理解,如果客户端连接到我的服务器,docker的负载平衡器将向我的N个复制服务器中的一个发送请求,并且只有该服务器知道客户端已连接。 因此,如果某个传统HTTP请求在另一个副本上更新了我的数据,则可能由于给定服务器中不存在此连接而无法发送信息

有没有办法处理这种情况?我想在服务器之间包含一个消息队列,将数据发送到所有服务器,然后包含连接的服务器将发送数据,但这是推荐的方法吗


非常感谢

自提出问题以来,我做了进一步的调查。我会发布我的发现,以防它对有类似问题的人有所帮助

我发现的一个选项是使用MessageQueue或类似的东西将消息广播到所有副本,然后每个副本只过滤可以发送的消息,因为副本本身知道该副本中可用的TCP连接

但我认为这会给副本带来过大的压力,因为它们都在接收所有消息,因此一种解决方案是创建一个队列或服务,将给定连接的id链接到副本,并仅将消息转发给感兴趣的副本。 我认为这可以很容易地通过主题来完成,或者为每个tcp连接创建一个以某个id作为标识符的队列,然后推送到相应的队列


如果有人看到任何问题或想补充什么,我们将不胜感激

自提出问题以来,我做了进一步的调查。我会发布我的发现,以防它对有类似问题的人有所帮助

我发现的一个选项是使用MessageQueue或类似的东西将消息广播到所有副本,然后每个副本只过滤可以发送的消息,因为副本本身知道该副本中可用的TCP连接

但我认为这会给副本带来过大的压力,因为它们都在接收所有消息,因此一种解决方案是创建一个队列或服务,将给定连接的id链接到副本,并仅将消息转发给感兴趣的副本。 我认为这可以很容易地通过主题来完成,或者为每个tcp连接创建一个以某个id作为标识符的队列,然后推送到相应的队列

如果有人看到任何问题或想补充什么,我们将不胜感激