Settings

Theme

How We Improved Reliability of our WebSocket Connections

making.close.com

41 points by philfreo 4 years ago · 18 comments

Reader

moffkalast 4 years ago

> The (sadly all too) common approach to rarely occurring bugs & edge cases: Pretend like the problem doesn't exist. Blame it on faulty networking, solar flares, etc.

How to tell if someone hasn't been working with a piece of software in production yet? They've never blamed a bug on cosmic radiation yet :D

robinjhuang 4 years ago

I think socket.io handles this client keep alive automatically.

https://socket.io/docs/v4/how-it-works/

See disconnection detection section

politician 4 years ago

Good to know that WebSocket API is broken by design. Thanks W3C!

https://www.w3.org/Bugs/Public/show_bug.cgi?id=13104

  • news_to_me 4 years ago

    This is what confused me. The discussion made sense to leave it up to the browser to implement, but I can't understand why they didn't require it in the browser WebSocket implementation — they even suggested it and then forgot about it.

  • wojcikstefan 4 years ago

    Yes! I was both surprised and confused when I saw this. Unless I'm missing something, it means that every application implementing WebSockets has to reinvent the wheel, creating their client-side ping/pong handler using Data Frames since browsers don't automatically send nor expose an API for sending/acting on Control Frames.

acknackack 4 years ago

A classic issue of TCP half open connection. The client/browser side still thinks that the websocket/TCP connection is still alive. It happens because the client is not actively sending any data outbound, which would have helped to reset that connection eventually. It will be nice if the browser side of the websocket connection can also start PING/PONG mechanism.

david422 4 years ago

Interesting read, thanks. I've delved into websockets and hit some interesting issues. I don't think I've had this scenario - that I know of - but this is good to know.

heliostatic 4 years ago

> You need to prove that what you think your code does is truly what happens.

Such a good insight -- seems obvious, but too often the source of gotchas, bad data, and bad user experience.

hungnv 4 years ago

This is practical implementation when working with websocket. When server got an error or timeout waiting for client pong, it closes the connection, at the same time client send “health check” message without receive reponse (whatever message value of your choise) it closes the connection and reconnect.

renewiltord 4 years ago

This is why so many crypto exchanges send ping and pongs periodically as requests and not as control.

It’s application layer keepalive.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection