提问人:Luca De Nardi 提问时间:8/27/2015 最后编辑:Luca De Nardi 更新时间:12/21/2020 访问量:811
检测(客户端)连接断开与 Socket.io
Detect (client) connection drop with Socket.io
问:
我正在尝试使用 Socket.io(带有 NodeJS 和 AngularJS)来检测客户端何时因连接中断而断开连接。
我试过捕捉socket.on
disconnect
connect_error
reconnect_attempt
reconnecting
但看起来他们没有在客户端被解雇。 我做错了什么?
由于连接中断是客户端问题,我希望我应该能够在客户端检测到它,但也许我错了。
有人可以帮我吗?谢谢!
**编辑:** 这是我正在使用的代码
socket.io.timeout(1000);
console.log(socket);
socket.on("open", function(){
console.log("Connected");
});
socket.on("reconnect_attempt", function(){
console.log("Attempt");
});
socket.on("reconnecting", function(){
console.log("Reconnecting");
});
socket.on("disconnect", function(){
$log.error("Client disconnected");
});
我正在通过 Chrome 的设备模式伪造连接。
答:
0赞
freakish
12/21/2020
#1
事情是这样的:没有可靠的方法来检测连接是否已死。尤其是在随机网络故障等极端事件下。欢迎来到网络的恐怖!这是因为两位将军的问题。
但我们可以近似!强制每个对等体定期发送 ping、读取 pong 和设置超时。并发出您自己的“断开连接,因为 X 秒内没有活动”事件。如有必要,可以在客户端和服务器端完成此操作(尽管在服务器端这更简单:只需定期删除非活动套接字即可)。
自从我断开电缆以来,我已经能够在 25 分钟后捕捉到这些事件
这似乎是测试计算机上的内部 TCP 超时。请注意,断开电缆与断开连接不同。毕竟,您可以重新插入它,一切可能正常工作,就像什么都没发生一样。这很重要,因为您不想对每个零星的(但无关紧要的)网络问题做出反应。
您可能还想阅读以下内容: TCP套接字无连接超时
评论
socket