如何使用socket.io断开服务侧的所有插座?

如何使用socket.io断开服务侧的所有插座?,socket.io,Socket.io,如何断开/关闭服务器端的所有套接字 可能从服务器端重新启动socket.io模块 (使用lateste socket.io)不幸的是,socket.io没有一个公开记录的接口,该接口从一个版本到下一个版本都是相同的,用于执行迭代所有连接的套接字这样的基本功能。如果您想查看各种方法的整个历史记录,那么您可以查看此问题中的整个版本历史记录:,但您必须只注意适用于您正在使用的特定socket.io版本的答案,然后针对您的特定版本对其进行测试 截至2018年8月,尝试仅使用socket.io中记录的接

如何断开/关闭服务器端的所有套接字

可能从服务器端重新启动socket.io模块


(使用lateste socket.io)

不幸的是,socket.io没有一个公开记录的接口,该接口从一个版本到下一个版本都是相同的,用于执行迭代所有连接的套接字这样的基本功能。如果您想查看各种方法的整个历史记录,那么您可以查看此问题中的整个版本历史记录:,但您必须只注意适用于您正在使用的特定socket.io版本的答案,然后针对您的特定版本对其进行测试


截至2018年8月,尝试仅使用socket.io中记录的接口时,可以使用其中任何一个来获取已连接套接字的列表,然后只需迭代它们即可断开连接,如上所示:

function getConnectedSockets() {
    return Object.values(io.of("/").connected);
}

getConnectedSockets().forEach(function(s) {
    s.disconnect(true);
});
根据客户端配置,客户端可能会尝试重新连接


您也可以只维护自己的连接套接字列表:

const connectedSockets = new Set();

io.on('connection', s => {
    connectedSockets.add(s);
    s.on('disconnect', () => {
        connectedSockets.delete(s);
    });
});

function getConnectedSockets() {
    return Array.from(connectedSockets);
}

getConnectedSockets().forEach(function(s) {
    s.disconnect(true);
});


如果您使用的是较旧版本的socket.io(特别是v1.4之前的版本),那么您必须测试它以确保它在较旧版本中工作,或者按照上述参考中的版本历史记录进行操作,并在那里找到针对特定版本的socket.io的答案。

对于我来说,jfriend00的解决方案不起作用(截至今天)

我必须这样做:

Object.keys(io.sockets.sockets).forEach(function(s) {
  io.sockets.sockets[s].disconnect(true);
});

不幸的是,socket.io在其不同版本中进行了大量的内部更改,因此您唯一的选择是找到一个专门记录的解决方案,或者您自己测试过,以便为特定版本的socket.io工作。如何通过这里有各种版本的socket.io。此答案中关于jfriend答案的评论不再准确,因为jfriend的答案已于2018年8月更新。