如何检测 socket.io 上的断开连接?
Posted
技术标签:
【中文标题】如何检测 socket.io 上的断开连接?【英文标题】:How can I detect disconnects on socket.io? 【发布时间】:2013-11-29 05:20:18 【问题描述】:我在我的项目中使用 socket.io。我打开了重新连接功能。如果用户与服务器断开连接,我想显示警报(您的互联网连接丢失。尝试重新连接)。如果用户再次重新连接,我想再显示一个警报(别担心,您已连接)。
我该怎么做?
【问题讨论】:
***.com/a/35124953/3904109 看这里 【参考方案1】:在您使用的客户端上检测
// CLIENT CODE
socket.on('disconnect', function()
// Do stuff (probably some jQuery)
);
对于 node.js 服务器,它也与上面的代码完全相同。
如果您出于某种原因想要检测用户断开连接并将其显示给其他人,则需要使用服务器来检测离开的人,然后使用以下方式向其他人发送一条消息:
socket.on('disconnect', function()
socket.broadcast.to(roomName).emit('user_leave', user_name: "johnjoe123");
);
希望对你有帮助
【讨论】:
感谢您的回复。现在断开部分可以,但我该如何重新连接部分? 服务器如何知道是否完全断开连接或客户端的 Internet 连接是否中断? @bluejamesbond 如果是完全断开连接,您可以从客户端发出自定义断开连接事件,在服务器上捕获它并通知其他人。【参考方案2】:socket.io
有一个disconnect
事件,把它放在你的connect
块中:
socket.on('disconnect', function ()
//do stuff
);
【讨论】:
请注意,如果客户端本身失去与服务器的连接,则事件disconnect
在套接字重试超时之前不会触发。【参考方案3】:
我就是这样处理这个问题的。我在客户端创建了一个发送者,它在服务器上调用心跳。
socket.on('heartbeat', function()
// console.log('heartbeat called!');
hbeat[socket.id] = Date.now();
setTimeout(function()
var now = Date.now();
if (now - hbeat[socket.id] > 5000)
console.log('this socket id will be closed ' + socket.id);
if (addedUser)
--onlineUsers;
removeFromLobby(socket.id);
try
// this is the most important part
io.sockets.connected[socket.id].disconnect();
catch (error)
console.log(error)
now = null;
, 6000);
);
我找到了这个代码函数来调用:
io.sockets.connected[socket.id].disconnect();
【讨论】:
以上是关于如何检测 socket.io 上的断开连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 上检查 socket.io 连接或断开连接?