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