6 ms·
I think socket.io handles this client keep alive automatically. https://socket.io/docs/v4/how-it-works/ https://socket.io/docs/v4/how-it-works/ See disconnect
by robinjhuang 5y ago
I think socket.io handles this client keep alive automatically.
https://socket.io/docs/v4/how-it-works/ https://socket.io/docs/v4/how-it-works/
See disconnection detection section
- wojcikstefan 5y agoThanks for pointing this out! https://socket.io/docs/v4/how-it-works/#disconnection-detection https://socket.io/docs/v4/how-it-works/#disconnection-detect... says: > At a given interval (the `pingInterval` value sent in the handshake) the server sends a PING packet and the client has a few seconds (the `pingTimeout` value) to send a PONG packet back. If the server does not receive a PONG packet back, it will consider that the connection is closed. So far this describes what we've already been doing prior to the fix mentioned in the blog post. However, this next sentence is where Socket.io's solution diverts from ours: > Conversely, if the client does not receive a PING packet within `pingInterval + pingTimeout`, it will consider that the connection is closed. Indeed looks like a solid way to solve the client-side recognition of a broken connection! -- That said, I'm a little confused because I cannot find any mention of `pingTimeout` in their JS client [0], and `pingInterval` is only mentioned in an implementation of a test server [1]. I wonder if I'm looking at the wrong thing. [0]: https://github.com/socketio/socket.io-client/search?q=pingtimeout https://github.com/socketio/socket.io-client/search?q=pingti... [1]: https://github.com/socketio/socket.io-client/search?q=pinginterval https://github.com/socketio/socket.io-client/search?q=pingin...
- flowerbreeze 5y agoSocket.io client depends on engine.io. That's probably why there isn't much in the socket.io-client: https://github.com/socketio/engine.io/search?q=pingInterval https://github.com/socketio/engine.io/search?q=pingInterval
- wojcikstefan 5y agoAh, yep, that explains it. They do solve this problem as documented: https://github.com/socketio/engine.io/blob/64d57545116c7a7d9eaf0a823d866946d6fedf4a/lib/socket.ts#L184-L195 https://github.com/socketio/engine.io/blob/64d57545116c7a7d9...
- williamstein 5y agoYes. Same with the primus websocket library.
- wojcikstefan 5y agoIndeed it does! https://github.com/primus/primus/blob/a7ba7249cb0205a01629dae1a2e54802819da08c/index.js#L332-L340 https://github.com/primus/primus/blob/a7ba7249cb0205a01629da... I do wish we didn't all have to reinvent this wheel though…