如何使用socket.io断开所有套接字服务端?

yar*_*rek 5 socket.io

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

也许从服务器端重新启动socket.io模块?

(使用lateste socket.io)

jfr*_*d00 6

不幸的是,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);
});
Run Code Online (Sandbox Code Playgroud)

根据客户端配置,客户端可能会尝试重新连接。


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

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);
});
Run Code Online (Sandbox Code Playgroud)

如果您使用的是较旧版本的socket.io(尤其是在v1.4之前),则必须对其进行测试以确保它可以在较旧版本中运行,或者按照上述参考中的版本历史记录在此处找到答案针对您的特定版本的socket.io。