Node.js 将nginx与socket.io一起使用时,客户端无法进行交互
我有一个使用socket.io的聊天应用程序。我将代码放在2服务器(ip1、ip2)上,并使用nginx进行负载平衡 这是nginx配置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
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存储在哪里?