サーバー上でnodejsを使用し、接続メカニズムとしてsocket.ioを使用するクライアント/サーバーアプリケーションがあります。私のアプリケーションに関連する理由から、ブラウザごとにアクティブな接続を 1 つだけにし、セッション中に後で開く可能性のある他のタブからのすべての接続を拒否したいと考えています。これは WebSocket でうまく機能しますが、WebSocket がブラウザーでサポートされておらず、代わりに XHR ポーリングが使用されている場合、切断は発生しないため、ユーザーがページを更新しただけでは、これは再接続として解釈されません (遅延があります)。再接続とセッションの復元)、しかし新しいタブとして、この同じタブによって行われた古い接続がまだアクティブであるため、接続が拒否されます。
更新が発生するたびに、クライアントからの接続を効果的に終了する方法を探しています。にバインドしてクライアント側でbeforeunload
呼び出してみましたが、同様のメッセージを送信してサーバーからの切断をトリガーしても成功しませんでした。ここで何か不足していますか?あなたの助けに感謝!socket.disconnect()
socket.emit('force-disconnect')
私はこの質問を読みましたが、私の特定のケースでは役に立ちませんでした。