3

Node.js アプリケーションで Socket.IO を使用しています。今日、初めてデプロイしましたが、ソケットが再接続し続けていることに気付きました。それぞれのソケットイベントでコンソールに「接続」および「切断」ログを記録しました。これが結果です。

さらに、私のブラウザが WebSocket を使用するのに十分なほど最新であるにもかかわらず、ポーリング手法が使用されているようです。つまり、これは構成の問題であると考えています。途中でプロキシを使用せずに Node.js を開発中に実行している場合、WebSocket は正常に動作します。

これは、Node.js サーバーへのプロキシとして機能する Nginx 構成です。

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";

WebSocket を有効にする上で重要です (このリファレンス/チュートリアルに従って)。これらを追加する前は、WebSocket はプロキシでまったく機能しませんでした。今、私はポーリングを取得しているようです。これは、何もないよりはましです。

私の Nginx バージョンは 1.4.0 安定版です。

4

1 に答える 1

2

問題は、Node アプリをクラスター化したことが原因であることがわかりました。Socket.IO のメモリ ストアとして Redis を追加すると、すべての問題が解決しました。http://adamnengland.wordpress.com/2013/01/30/node-js-cluster-with-socket-io-and-express-3/

于 2013-04-27T00:00:40.893 に答える