使用socket.io和nodejs强制客户端断开与服务器的连接

使用socket.io和nodejs强制客户端断开与服务器的连接,socket.io,Socket.io,是否有任何方法可以断开客户端与SocketIO的连接,并真正关闭连接?因此,如果有人连接到我的服务器,而我想关闭他们与我的服务器之间的连接,我将如何操作?假设您的套接字命名为socket,请使用: socket.disconnect() Socket.io使用EventEmitter模式断开/连接/检查心跳,以便您可以执行此操作Client.emit('disconnect')socket.disconnect()只能在客户端使用,不能在服务器端使用 Client.emit('disconne

是否有任何方法可以断开客户端与SocketIO的连接,并真正关闭连接?因此,如果有人连接到我的服务器,而我想关闭他们与我的服务器之间的连接,我将如何操作?

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

socket.disconnect()

Socket.io使用EventEmitter模式断开/连接/检查心跳,以便您可以执行此操作<代码>Client.emit('disconnect')

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

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


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

客户端。

断开连接()
应该可以工作

我的原始答案:

这还不可能


如果您也需要它,请投票/发表评论。

您为什么不能让服务器向客户端发送消息,使其调用断开连接功能

在客户端:

socket.emit('forceDisconnect');
在服务器上:

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

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


Socket.disconnect()
启动客户端(服务器端)。客户端没有机会保持连接:)

我正在使用
client.emit('disconnect')
+
client.removeAllListeners()
用于连接的客户端,以便在断开连接后忽略所有事件在我的情况下,我想断开基础连接,在这种情况下,我必须调用
socket.disconnect(true)
如您所见,需要从我在客户端使用的
套接字中断开连接()

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

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


这个对我不起作用

`socket.disconnect()` 
socket.disconnect(true)
这对我来说确实有效:

`socket.disconnect()` 
socket.disconnect(true)
移交
true
将关闭与客户端的底层连接,而不仅仅是客户端连接到的命名空间


一个示例用例:客户端使用无效的访问令牌(使用连接参数将访问令牌移交给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.Disconnect()//确定

不要使用:

socket.disconnect()


今早检查,现在似乎是:

socket.close()

您可以在擦除已连接的套接字中执行
socket=undefined
。因此,当您想连接到do套接字(url)时

所以看起来是这样的

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

let socket;

// Connect to server
socket = socketClient(url)

// When want to disconnect
socket = undefined;

不幸的是,这不起作用。我正在尝试从服务器端关闭与特定客户端的连接。这非常有效。。Im维护自己与客户的映射。。使用该映射。。。轻松断开客户端连接。。干杯您不必再手动调用
Client.emit('disconnect')
,使用最新的socket.io版本,现在有一个服务器端
socket.disconnect()
(请参阅我的答案)。由于最近的更新,您的amswer现在不正确,因此-1。我同意,这个答案不再有效,因为现在是
socket.disconnect()
也可以在服务器端使用。@VassilisBarzokas如果我想要一个回调,并在
disconnect()
函数完成后将一些参数传递给回调,该怎么办?创建一组商定的消息,其中一方通知另一方他们希望断开连接,然后执行您需要执行的操作,然后实际断开连接。我这样做,它确实会迫使客户端断开连接,不幸的是,客户端似乎只是立即重新连接。我是否误解了正在发生的事情,或者这是预期的行为?@kybernetikos是的,我希望如此——毕竟,客户可以选择如何处理自己的行为。通常,您想从当前连接中踢出另一方,比如因为身份验证超时-在此之后重新连接可能是可取的。那么您知道有什么方法告诉客户端“走开,我是认真的”吗?我的想法是确定客户行为不好,不希望他们使用我服务器上的资源。@ManishSapkal您可能应该为此提出一个新问题,它不适合评论。@Akshay 10年后,我不再使用socket.io;最好在他们的论坛或问题跟踪器中询问。因为客户端代码永远无法完全按照您的需要运行。用户可以轻松地修改它。如何查找服务器上已断开连接的用户的套接字?Manish:侦听套接字的
disconnect
事件,以确定它是否已断开连接。也可能是
close
事件,我不太确定。有关这方面的更多信息,请参阅socket.io的文档。