Gero
Gero

Reputation: 13553

How do i know if connection is alive with websockets?

I have a webapp, which is running in a browser. That webapp is connected to a server, which uses websockets. So the communication between the server and my client/browser is based on websockets. If some magic event occurs on the server, some webservice sends a new XML / JSON to my webapp and the new data gets displayed.

But how do i, as the client / browser, know if the connection is stil alive? Lets say i do not get any new XML for about 30 seconds. How would i know if the connection is closed/broken/server offline or everything is fine, but on the server himself no new magic event occured.

Upvotes: 24

Views: 43346

Answers (2)

fuzic
fuzic

Reputation: 2522

A websocket connection object has a readyState field which will tell you if the connection is still active (from the dart documentation). The readyState can be either

0 - connection not yet established
1 - conncetion established
2 - in closing handshake
3 - connection closed or could not open

You can also define an event handler for the websocket close event if this is something you'd like to handle (try to reconnect, etc).

Upvotes: 26

oberstet
oberstet

Reputation: 22011

3 ways:

  • rely on TCP to detect loss of connectivity, which will ultimately pop up in JS onclose event
  • send WebSocket pings from server .. browsers will reply with WS pongs, loss of connectivity is probably more robustly detected also on client side
  • send app level heartbeats from browser to server, server need to have logic to reply. you can't trigger WS pings from browsers (in JS)

Upvotes: 20

Related Questions