有什么方法可以断开与 SocketIO 的客户端,并从字面上关闭连接?所以如果有人连接到我的服务器,我想关闭他们和我的服务器之间的连接,我该怎么做呢?
17 回答
socket.disconnect()
只能在客户端使用,不能在服务器端使用。
Client.emit('disconnect')
触发服务器上的断开连接事件,但不会有效地断开客户端。客户端不知道断开连接。
所以问题仍然存在:如何强制客户端与服务器端断开连接?
为什么您不能让服务器向客户端发出一条消息,使其调用断开功能?
在客户端:
socket.emit('forceDisconnect');
在服务器上:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
对于那些在谷歌上找到这个的人 - 现在有一个解决方案:
Socket.disconnect()
踢客户端(服务器端)。客户没有机会保持联系:)
假设您的套接字的命名套接字,请使用:
socket.disconnect()
这对我不起作用:
`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');
// });
在我的情况下,我想拆除底层连接,在这种情况下我必须调用socket.disconnect(true)
,如您所见,需要从源代码here
client._onDisconnect()
应该管用
Socket.io 使用 EventEmitter 模式来断开/连接/检查心跳,这样你就可以做到。 Client.emit('disconnect');
我使用client.emit('disconnect')
+client.removeAllListeners()
连接客户端以在断开连接后忽略所有事件
我在客户端使用socket.disconnect();
client.emit('disconnect') didnt work for me
您可以socket = undefined
擦除已连接的套接字。所以当想要连接时做 socket(url)
所以它看起来像这样
const socketClient = require('socket.io-client');
let socket;
// Connect to server
socket = socketClient(url)
// When want to disconnect
socket = undefined;
我在 React Native 应用程序上使用了套接字客户端,当我调用socketIOClient.disconnect()
它时断开与服务器的连接,但是当我再次连接到套接字时,先前的事件再次连接,下面的代码通过删除所有现有事件并断开套接字连接对我有用.
socketIOClient.removeAllListeners();
socketIOClient.disconnect(true);
从服务器端强制断开套接字
socket.disconnect(true)
或者
通过客户端事件断开套接字
在客户端:
socket.emit('forceDisconnect');
在服务器上:
socket.on('forceDisconnect', function(){
socket.disconnect(true);
});
将新的套接字连接添加到数组,然后当您想要关闭所有连接时 - 循环它们并断开连接。(服务器端)
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();
});
采用 :
socket.Disconnect() //好的
不使用 :
socket.disconnect()