How do i know if connection is alive with websocke

2020-02-03 06:02发布

问题:

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.

回答1:

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)


回答2:

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).