5

サーバー上でnodejsを使用し、接続メカニズムとしてsocket.ioを使用するクライアント/サーバーアプリケーションがあります。私のアプリケーションに関連する理由から、ブラウザごとにアクティブな接続を 1 つだけにし、セッション中に後で開く可能性のある他のタブからのすべての接続を拒否したいと考えています。これは WebSocket でうまく機能しますが、WebSocket がブラウザーでサポートされておらず、代わりに XHR ポーリングが使用されている場合、切断は発生しないため、ユーザーがページを更新しただけでは、これは再接続として解釈されません (遅延があります)。再接続とセッションの復元)、しかし新しいタブとして、この同じタブによって行われた古い接続がまだアクティブであるため、接続が拒否されます。

更新が発生するたびに、クライアントからの接続を効果的に終了する方法を探しています。にバインドしてクライアント側でbeforeunload呼び出してみましたが、同様のメッセージを送信してサーバーからの切断をトリガーしても成功しませんでした。ここで何か不足していますか?あなたの助けに感謝!socket.disconnect()socket.emit('force-disconnect')

私はこの質問を読みましたが、私の特定のケースでは役に立ちませんでした。

4

2 に答える 2

10

問題を解決しました。これは で導入されたバグであることが判明しましたsocket.io 0.9.5。この問題が発生した場合は、サーバー側とクライアント側の両方のコードを に更新しsocket.io > 0.9.9、socket.io クライアント側オプションsync disconnect on unloadを に設定するだけで準備完了trueです。

オプションは次のように設定されます。

var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});
于 2012-08-21T16:19:41.493 に答える
0

開いているファイル記述子が不足している場合は、「Error: xhr poll error」が表示されることもあります。これは、負荷テスト中に発生する可能性があります。

現在開いているファイル記述子のサイズを確認します。

ulimit -n

高い数値に増やします。

ulimit -n 1000000
于 2014-01-30T11:08:39.700 に答える