Node.js 将nginx与socket.io一起使用时,客户端无法进行交互

Node.js 将nginx与socket.io一起使用时,客户端无法进行交互,node.js,nginx,socket.io,load-balancing,Node.js,Nginx,Socket.io,Load Balancing,我有一个使用socket.io的聊天应用程序。我将代码放在2服务器(ip1、ip2)上,并使用nginx进行负载平衡 这是nginx配置 upstream socket_nodes { ip_hash; server ip1:1654; server ip2:1653; } server { listen 1653; server_name livechatsoftware.com.vn; location / { proxy_set_header X-Re

我有一个使用socket.io的聊天应用程序。我将代码放在2服务器(ip1、ip2)上,并使用nginx进行负载平衡

这是nginx配置

upstream socket_nodes {
   ip_hash;
   server ip1:1654;
   server ip2:1653;
}
server {
 listen 1653;
 server_name livechatsoftware.com.vn;    
  location / {
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header X-NginX-Proxy true;
  proxy_http_version 1.1;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $host;
  proxy_pass http://socket_nodes;
  proxy_redirect off;
 }
}
如果客户端连接到同一台服务器,一切都会正常工作。但如果客户端1连接到服务器ip1,则客户端2连接到服务器ip2。客户端1和客户端2无法交互(例如无法发出、发送消息等)


感谢您的帮助

我正在使用nginx来平衡我的节点进程(express.js+mongodb+socket.io+passport.js)。尽管它们都在同一台服务器上,但socket.io事件仍然不能在它们之间共享。这意味着我也面临着完全相同的问题。因此,我使用mong.socket.io()在mongo存储中存储socket.io事件。通过这种方式,每个socket.io进程从一个集中的存储中读取事件

您还需要一个中央存储,可以从任何服务器访问socket.io事件。我从未使用过这种设置,但请查看下面的软件包

我会将redis安装到我的一台服务器上,并将我的socket.io进程指向该服务器,如下所示

io.adapter(redis({ host: 'localhost', port: 6379 })); // you should use ip address and the port for the remote server 

您还可以使用其他适配器选项,如我之前共享的链接中所述

你查过那页了吗@CanerDağlı是的,我已经读过它(“在节点之间传递事件”)。但我不知道如何使用,因为我有多个服务器(ip1,ip2),所以socket.io-redis存储在哪里?