【发布时间】:2011-06-30 05:06:26
【问题描述】:
有什么方法可以断开与 SocketIO 的客户端连接,并从字面上关闭连接?所以如果有人连接到我的服务器,我想关闭他们和我的服务器之间的连接,我该怎么做呢?
【问题讨论】:
标签: socket.io
有什么方法可以断开与 SocketIO 的客户端连接,并从字面上关闭连接?所以如果有人连接到我的服务器,我想关闭他们和我的服务器之间的连接,我该怎么做呢?
【问题讨论】:
标签: socket.io
编辑:现在可以实现了
You can now simply call socket.disconnect() on the server side.
我原来的回答:
这还不可能。
如果您也需要它,请在this issue 上投票/评论。
【讨论】:
socket.disconnect()只能用在客户端,不能用在服务器端。
Client.emit('disconnect') 触发服务器上的断开连接事件,但没有有效断开客户端。客户端不知道断开连接。
所以问题仍然存在:如何强制客户端与服务器端断开连接?
【讨论】:
Client.emit('disconnect'),现在有一个服务器端 socket.disconnect()(请参阅我的答案)。
socket.disconnect() 也可以在服务器端使用。
disconnect() 函数完成后将一些参数传递给回调怎么办?
您为什么不能让服务器向客户端发出一条消息,使其调用断开功能?
在客户端:
socket.emit('forceDisconnect');
在服务器上:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
【讨论】:
【讨论】:
对于那些在谷歌上找到这个的人 - 现在有一个解决方案:
Socket.disconnect() 踢客户端(服务器端)。客户没有机会保持联系:)
【讨论】:
disconnect事件,判断是否断开。也可以是close 事件,我不太确定。有关这方面的更多信息,请参阅 socket.io 的文档。
假设你的套接字的命名套接字,使用:
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),正如您从 source 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() //ok
不要使用:
socket.disconnect()
【讨论】: