SocketIOでクライアントを切断し、文字通り接続を閉じる方法はありますか?だから誰かが私のサーバーに接続していて、そのサーバーと私のサーバーの間の接続を閉じたい場合、どうすればそれを行うことができますか?
socket.disconnect()
は、サーバー側ではなく、クライアント側でのみ使用できます。
Client.emit('disconnect')
はサーバーで切断イベントをトリガーしますが、クライアントを効果的に切断しません。クライアントは切断を認識しません。
したがって、疑問は残ります:クライアントをサーバー側から強制的に切断する方法は?
サーバーにクライアントにメッセージを送信させて、切断機能を呼び出させない理由は何ですか?
クライアント上:
socket.emit('forceDisconnect');
サーバー上:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
ソケットの名前付きソケットを想定して、次を使用します。
socket.disconnect()
グーグルでこれを見つけた人のために-今すぐこの解決策があります:
Socket.disconnect()
は、クライアント(サーバー側)をキックします。クライアントが接続したままになるチャンスはありません:)
client._onDisconnect()
は動作するはずです
これはうまくいかなかった:
`socket.disconnect()`
私にとってこれはdid work:
socket.disconnect(true)
true
を渡すと、クライアントが接続されているネームスペースだけでなく、クライアントへのアンダーレイ接続が閉じられます Socket IO Documentation 。
使用例の例:クライアントは無効なアクセストークンでWebソケットサーバーに接続しました(接続パラメーターでWebソケットサーバーに渡されたアクセストークン)。 Webソケットサーバーは、無効なアクセストークンのため、接続を閉じることをクライアントに通知します。
// (1) the server code emits
socket.emit('invalidAccessToken', function(data) {
console.log(data); // (4) server receives 'invalidAccessTokenEmitReceived' from client
socket.disconnect(true); // (5) force disconnect client
});
// (2) the client code listens to event
// client.on('invalidAccessToken', (name, fn) => {
// // (3) the client ack emits to server
// fn('invalidAccessTokenEmitReceived');
// });
Socket.ioは、EventEmitterパターンを使用して、ハートビートを切断/接続/チェックします。 Client.emit('disconnect');
接続されたクライアントにclient.emit('disconnect')
+ client.removeAllListeners()
を使用して、切断後にすべてのイベントを無視しています
つかいます :
socket.Disconnect()// ok
使ってはいけません :
socket.disconnect()
クライアント側で使用していますsocket.disconnect();
client.emit('disconnect') didnt work for me