2017-02-27 29 views
1

複数のsocket.ioサーバー(ALB均衡)の場合、クライアントは「トランスポートエラー」を起こす両方のノードに接続され、切断されます。理想的には、1つのノードに接続し、そのノードに接続したままにする必要があります。 ALB内の1つのノードの場合、接続は永続的です。どんな助け?socket.ioクライアントの接続が繰り返し切断される

答えて

1

デフォルトでは、socket.ioが最初に起動すると、httpポーリングモードで起動します。いくつかのシーケンシャルなhttpリクエストと、両端の機能のOKチェックの後、webSocketモードに切り替わります。これは、最初に動作する接続を作成し、両端でwebSocketがサポートされているかどうかを判断し、そうであればwebSocketを使用するように切り替えます。非粘着性のロードバランサを使用している場合、最初のいくつかのHTTPポーリング要求が異なるサーバーで終了する可能性があります。これにより、単一のサーバーでいくつかの接続が失われるためsocket.ioの動作が破損する可能性があります。起動シーケンス。

ロードバランサをスティッキーに設定すると、常に同じクライアントを同じサーバーに送信するか、socket.ioにwebSocketモードでのみ接続するように指示できます。ここに見られるように

はWebSocketのとポーリングなし(これだけの接続を1つ)を使用するだけにsocket.ioを設定するには、クライアントでの設定オプションを設定することができます。

Socket.io 1.x: use WebSockets only?

ことに留意してくださいsocket.ioには自動接続ロジックがあるので、サーバーへのsocket.io接続を確立してからしばらく時間がかかると、何らかの理由で接続が停止すると、クライアントは現在の接続を切断して新しい接続を試みます。それでもスティッキーでないロードバランサを使用している場合は、その再接続が別のサーバーで終了する可能性があります。サーバー上で何をしているかによって、問題が発生する場合としない場合があります。スティッキーロードバランシングは、再接続が同じサーバー上で終わることを確認します。

+0

ポーリングではなくwebsocketとして直接トランスポートを使用するというデメリットはありますか? –

+0

@VikasGoyal - WebSocketをサポートしていないブラウザで実行すると、接続できません。 socket.ioは通常、欠落しているwebSocketの代わりにhttpポーリングを代入することによってその条件を処理します。 – jfriend00

関連する問題