Socket IO detect when client has lost connection

2019-04-05 05:12发布

I need to be able to detect when a user has lost connection to the socket, it doesn't seem that socket.on("disconnect") is being called when I just close my laptop, so it doesn't run the ajax call that needs to run in order to update the database to mark the user as offline. How could I check if the connection has been closed or whatever?

2条回答
闹够了就滚
2楼-- · 2019-04-05 05:44

we came across this too and as mentioned above use our own heartbeat timer.

For example the server will emit a heartbeat every 5 seconds (we simple send out server time). The client has an 11 second timeout so it has 2 chances to catch the heartbeat. If it receives the heartbeat we reset the timer. If we miss both heartbeats the timeout function is run and you do whatever you want there.

Fairly straightforward.

查看更多
你好瞎i
3楼-- · 2019-04-05 06:00

As mentioned here https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, Socket.IO has it's own heartbeat implementation. But the defaults are a 25s interval and a 60s threshold for a lost connection.

So my advice: Set the defaults as you expect on testing. Otherwise you may miss the threshold.

Example:

socket.set("heartbeat timeout", 10);
socket.set("heartbeat interval", 5);
查看更多
登录 后发表回答