web-dev-qa-db-fra.com

Comment savoir si la connexion est vivante avec WebSockets?

J'ai une webApp, qui fonctionne dans un navigateur. Ce webApp est connecté à un serveur, qui utilise des webockets. La communication entre le serveur et mon client/navigateur est donc basée sur WebSockets. Si un événement magique survient sur le serveur, un service WebService envoie un nouveau XML/JSON à mon webApp et les nouvelles données sont affichées.

Mais comment puis-je, en tant que client/navigateur, savez-vous si la connexion est STIL Vive? Disons que je n'obtiens pas de nouveau XML pendant environ 30 secondes. Comment savoir si la connexion est fermée/cassée/serveur hors ligne ou tout va bien, mais sur le serveur lui-même, aucun nouvel événement magique ne s'est produit.

19
Gero

3 façons:

  • s'appuyer sur TCP pour détecter la perte de connectivité, qui sera finalement apparu dans JS OnClose Event
  • envoyer des pings de Websocket du serveur. Les navigateurs répondront avec WS Pongs, la perte de connectivité est probablement plus robuste détectée également sur le côté du client.
  • envoyer le niveau d'application Heartbeats à partir du navigateur au serveur, le serveur doit avoir une logique à répondre. Vous ne pouvez pas déclencher des pings WS des navigateurs (en JS)
19
oberstet

Un objet de connexion WebSocket a un champ readyState qui vous indiquera si la connexion est toujours active (((à partir de la documentation DART) . Le prêt préalable peut être soit

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

Vous pouvez également définir un gestionnaire d'événements pour l'événement Websocket close si cela vous permet de gérer (essayez de vous reconnecter, etc.).

24
fuzic