3

我在我的 Node.js 应用程序中使用 Socket.IO。今天我第一次部署它,我注意到我的套接字不断重新连接。我在相应的套接字事件中将“连接”和“断开连接”记录到控制台,结果如下:

更重要的是,似乎正在使用轮询技术,当我的浏览器肯定足够现代以使用 WebSockets 时——所以我认为这是一个配置问题。当我在开发中运行 Node.js 且中间没有代理时,WebSocket 工作正常。

这是我的 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 方面非常重要(根据此参考/教程)。在我添加这些之前,WebSockets 根本无法与代理一起使用。现在我似乎得到了民意调查,这总比没有好。

我的 Nginx 版本是 1.4.0 稳定版。

4

1 回答 1

2

原来问题是因为我已经集群了我的 Node 应用程序。添加了 Redis 作为 Socket.IO 的内存存储,这解决了我所有的问题!http://adamnengland.wordpress.com/2013/01/30/node-js-cluster-with-socket-io-and-express-3/

于 2013-04-27T00:00:40.893 回答