套接字io js延迟断开连接发出
作者:互联网
socket.on(‘disconnect’)立即在客户端启动,但是在服务器端需要一分钟.
方案1:-如果客户端由于互联网问题而断开连接,则服务器端断开连接会在1分钟后发出,无论如何都可以在服务器端立即找到.
我试图更改pingTimeout = 30000和pingInterval = 12000,但每30秒重新连接并连接一次.
解决方法:
您可以使用超时延迟和套接字断开事件来使断开和重新连接更加容易.
连接套接字后,将它们添加到存储桶对象中.
if (socket.request.sessionID && !bucket[socket.request.sessionID]) {
bucket[socket.request.session.player.id] = socket.id; //nuuu they stealin mah bukkit
}
这会将玩家的ID(我通过绑定到套接字的节点会话进行跟踪)添加为socketId的键
//object for delayed log out
let disconnection = {
sid : null, //socket id
delay : null //timeout id
};
创建一个存储您的套接字ID的对象,以便您可以跟踪断开连接的对象.
socket.on('disconnect', function () {
disconnection.sid = socket.request.sessionID; //grab session id
disconnection.delay = setTimeout(() => {
//set timeout to variable, in case of reconnection
delete bucket[socket.request.sessionID];
//emit the disconnection event
}, 60000);
});
当用户断开连接时,请将超时时间设置为必须重新连接的时间.
重新连接后,只需执行以下操作:
io.sockets.on("connection", socket => {
//check for disconnection, compare socket ids, and remove timeout if sockets match
if (disconnection.delay && disconnection.sid == socket.request.sessionID) {
clearTimeout(disconnection.delay);
disconnection.sid = null;
}
});
这将检查现有套接字ID的重新连接并清除超时,再次成功建立连接.
请注意,此代码是SourceUndead(我的游戏)的副本,因此其中一些可能不会直接翻译给您(例如,我的套接字变量也与会话绑定),但是超时断开连接的概念是相同的.
标签:node-js,sockets,socket-io,javascript 来源: https://codeday.me/bug/20191118/2026214.html