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