我在Node.js应用程序中使用Socket.IO。今天我第一次部署它,我注意到我的插座不断重新连接。我在相应的套接字事件中“连接”和“断开”日志记录到控制台,这就是结果:
更重要的是,似乎正在使用轮询技术,当我的浏览器确实足够现代化以使用WebSockets时 - 所以我认为这是一个配置问题。当我在开发中运行Node.js而中间没有代理时,WebSockets工作正常。
这是我的Nginx配置,它作为我的Node.js服务器的代理:
upstream reader.oliverjash.me {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name reader.oliverjash.me;
access_log /var/log/nginx/reader.oliverjash.me.access.log;
error_log /var/log/nginx/reader.oliverjash.me.error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://reader.oliverjash.me;
proxy_redirect off;
}
}
我相信这句话:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
在启用WebSockets方面很重要(根据this reference/tutorial)。在我添加这些之前,WebSockets根本不适用于代理。现在我似乎得到了民意调查,这比什么都没有好。
我的Nginx版本稳定在1.4.0。
答案 0 :(得分:2)
原来问题是因为我已经聚集了我的Node应用程序。将Redis添加为Socket.IO的内存存储,这解决了我所有的问题! http://adamnengland.wordpress.com/2013/01/30/node-js-cluster-with-socket-io-and-express-3/