强制客户端与socket.io和nodejs断开连接

时间:2011-02-19 01:24:09

标签: socket.io

有没有办法断开客户端与SocketIO,并完全关闭连接?因此,如果有人连接到我的服务器,并且我想关闭它们与我的服务器之间的连接,我将如何去做呢?

17 个答案:

答案 0 :(得分:129)

编辑:现在可以

You can now simply call socket.disconnect() on the server side

我原来的回答:

这还不可能。

如果您也需要,请对this issue投票/评论。

答案 1 :(得分:16)

socket.disconnect()只能在客户端使用,而不能在服务器端使用。

Client.emit('disconnect')触发服务器上的断开连接事件,但不能有效地断开客户端连接。客户端不知道断开连接。

所以问题仍然存在:如何强制客户端与服务器端断开连接?

答案 2 :(得分:8)

为什么你不能让服务器向客户端发出一条让它调用断开连接功能的消息?

在客户端:

socket.emit('forceDisconnect');

在服务器上:

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

答案 3 :(得分:4)

假设您的套接字是命名套接字,请使用:

socket.disconnect()

答案 4 :(得分:4)

对于那些在谷歌上发现这一点的人 - 现在有一个解决方案:

Socket.disconnect()踢客户端(服务器端)。客户没有机会保持联系:)

答案 5 :(得分:3)

在我的情况下,我想拆除底层连接,在这种情况下我必须致电socket.disconnect(true),因为您需要source here

答案 6 :(得分:2)

client._onDisconnect()应该有效

答案 7 :(得分:1)

Socket.io使用EventEmitter模式断开连接/连接/检查心跳,这样就可以了。 Client.emit('disconnect');

答案 8 :(得分:1)

对我不起作用

`socket.disconnect()` 

对我有用

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

答案 9 :(得分:0)

我在客户端使用socket.disconnect();

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

答案 10 :(得分:0)

我正在使用client.emit('disconnect') + client.removeAllListeners()连接客户端,以便在断开连接后忽略所有事件

答案 11 :(得分:0)

使用:

  

socket.Disconnect()//确定

请勿使用:

  

socket.disconnect()

答案 12 :(得分:0)

今天早上检查似乎是现在:

socket.close()

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

答案 13 :(得分:0)

您可以执行socket = undefined来擦除已连接的插座。因此,当要连接时,请执行socket(url)

所以看起来像这样

const socketClient = require('socket.io-client');

let socket;

// Connect to server
socket = socketClient(url)

// When want to disconnect
socket = undefined;

答案 14 :(得分:0)

我在 React Native 应用程序上使用了套接字客户端,当我调用 socketIOClient.disconnect() 时,这会断开与服务器的连接,但是当我再次连接到套接字时,先前的事件又重新连接了,下面的代码对我有用删除所有现有事件并断开套接字连接。

socketIOClient.removeAllListeners();
socketIOClient.disconnect(true);

答案 15 :(得分:0)

从服务器端强行断开套接字

socket.disconnect(true)

通过客户端事件断开套接字

在客户端:

socket.emit('forceDisconnect');

在服务器上:

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

答案 16 :(得分:-1)

向阵列添加新的套接字连接,然后当您想要关闭所有套接字时 - 循环通过它们并断开连接。 (服务器端)

var socketlist = [];

   io.sockets.on('connection', function (socket) {
        socketlist.push(socket);  
        //...other code for connection here..
   });


    //close remote sockets
    socketlist.forEach(function(socket) {        
        socket.disconnect();                      
    });