127

有什么方法可以断开与 SocketIO 的客户端,并从字面上关闭连接?所以如果有人连接到我的服务器,我想关闭他们和我的服务器之间的连接,我该怎么做呢?

4

17 回答 17

159

编辑:这现在是可能的

您现在可以简单地socket.disconnect()在服务器端调用。

我原来的答案:

这还不可能。

如果您也需要它,请对此问题进行投票/评论。

于 2011-04-06T00:29:58.457 回答
17

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

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

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

于 2011-03-16T10:45:25.397 回答
9

为什么您不能让服务器向客户端发出一条消息,使其调用断开功能?

在客户端:

socket.emit('forceDisconnect');

在服务器上:

socket.on('forceDisconnect', function(){
    socket.disconnect();
});
于 2012-03-29T06:18:06.810 回答
8

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

socket.close()

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

于 2019-05-25T15:03:13.880 回答
5

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

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

于 2012-04-07T11:46:41.043 回答
4

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

socket.disconnect()
于 2011-02-19T01:52:13.033 回答
4

这对我不起作用

`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');
// });
于 2018-04-12T18:39:15.160 回答
3

在我的情况下,我想拆除底层连接,在这种情况下我必须调用socket.disconnect(true),如您所见,需要从源代码here

于 2015-05-19T02:06:48.760 回答
2

client._onDisconnect()应该管用

于 2011-03-29T09:49:11.370 回答
1

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

于 2011-03-11T00:46:33.883 回答
1

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

于 2012-06-07T06:29:21.873 回答
0

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

client.emit('disconnect') didnt work for me
于 2016-03-27T09:16:26.497 回答
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;
于 2019-11-02T06:29:59.787 回答
0

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

socketIOClient.removeAllListeners();
socketIOClient.disconnect(true);
于 2021-06-19T05:05:52.850 回答
0

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

socket.disconnect(true)

或者

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

在客户端:

socket.emit('forceDisconnect');

在服务器上:

socket.on('forceDisconnect', function(){
    socket.disconnect(true);
});
于 2021-07-08T20:49:45.960 回答
-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();                      
    });    
于 2017-03-28T17:52:48.530 回答
-1

采用 :

socket.Disconnect() //好的

不使用 :

socket.disconnect()

于 2019-01-30T21:14:04.653 回答