web-dev-qa-db-ja.com

socket.ioとnodejsを使用してサーバーからクライアントを強制的に切断します

SocketIOでクライアントを切断し、文字通り接続を閉じる方法はありますか?だから誰かが私のサーバーに接続していて、そのサーバーと私のサーバーの間の接続を閉じたい場合、どうすればそれを行うことができますか?

109
Daniel Kenney

編集:これが可能になりました

サーバー側でsocket.disconnect()を呼び出すことができます

元の答え:

これはまだ不可能です。

必要な場合は、 この問題 に投票/コメントしてください。

134
nh2

socket.disconnect()は、サーバー側ではなく、クライアント側でのみ使用できます。

Client.emit('disconnect')はサーバーで切断イベントをトリガーしますが、クライアントを効果的に切断しません。クライアントは切断を認識しません。

したがって、疑問は残ります:クライアントをサーバー側から強制的に切断する方法は?

15
Fabien

サーバーにクライアントにメッセージを送信させて、切断機能を呼び出させない理由は何ですか?

クライアント上:

socket.emit('forceDisconnect');

サーバー上:

socket.on('forceDisconnect', function(){
    socket.disconnect();
});
8
quahada

ソケットの名前付きソケットを想定して、次を使用します。

socket.disconnect()
4
Erik

グーグルでこれを見つけた人のために-今すぐこの解決策があります:

Socket.disconnect()は、クライアント(サーバー側)をキックします。クライアントが接続したままになるチャンスはありません:)

4
Sascha Gehlich

今朝チェックすると、今のように見えます:

socket.close()

https://socket.io/docs/client-api/#socket-close

2
HAS-Jack

client._onDisconnect()は動作するはずです

2
Emmerman

これはうまくいかなかった

`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');
// });
1
Baran

Socket.ioは、EventEmitterパターンを使用して、ハートビートを切断/接続/チェックします。 Client.emit('disconnect');

1

接続されたクライアントにclient.emit('disconnect') + client.removeAllListeners()を使用して、切断後にすべてのイベントを無視しています

0
skyman

つかいます :

socket.Disconnect()// ok

使ってはいけません :

socket.disconnect()

0
m-tech

クライアント側で使用していますsocket.disconnect();

client.emit('disconnect') didnt work for me
0
yonia