Gestion de la perte de connexion avec les Websockets
J'ai récemment mis en place un local serveur WebSocket qui fonctionne très bien, cependant, je vais avoir quelques problèmes de compréhension de comment je dois gérer une perte soudaine de la connexion que ni le client ou le serveur intentionnellement lancé, j'ai.e: le Serveur perd de la puissance, les câbles ethernet sorti etc... j'ai besoin du client pour savoir si la connexion a été perdue à l'intérieur de ~10seconds.
Côté Client, la connexion est tout simplement:
var websocket_conn = new WebSocket('ws://192.168.0.5:3000');
websocket_conn.onopen = function(e) {
console.log('Connected!');
};
websocket_conn.onclose = function(e) {
console.log('Disconnected!');
};
Je peux déclencher manuellement la connexion déconnexion qui fonctionne très bien,
websocket_conn.close();
Mais si j'ai simplement tiré le câble ethernet à l'arrière de l'ordinateur, ou la désactivation de la connexion, onclose
n'est pas appelée. J'ai lu dans un autre post qu'il finirait par être appelé lorsque TCP détecte une perte de connectivitémais il n'est pas en temps opportun, que j'ai besoin en tant que par défaut pour Firefox, je crois, est de 10 minutes, et je n'ai pas vraiment envie d'aller autour de centaines d'ordinateurs about:config
modification de cette valeur. La seule suggestion que j'ai lu est d'utiliser un "ping/pong" keep-alive bureaux de style de méthode qui semble contre-intuitif à l'idée de les websockets.
Est-il un moyen plus facile de détecter ce type de débrancher le comportement? Ce sont les vieux messages, je suis en train de lire encore jusqu'à ce jour d'un point technique, et la meilleure méthode est encore de ping/pong " style?
source d'informationauteur MLeFevre
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter de ping-pong méthode
Créer un code dans le serveur lors de la recevoir __ping__ envoyer __pong__ retour
Code JavaScript, c'est de donner ci-dessous
C'était la solution que j'ai fini par faire ce qui semble bien fonctionner pour le moment, il est tout à fait spécifique à mon projet d'installation d'un & s'appuie sur des critères de mise en place qui n'a pas été mentionné dans ma question, mais il pourrait être utile pour quelqu'un d'autre si ils arrivent à faire la même chose.
La connexion au serveur websocket se produit à l'intérieur d'un addon Firefox, et par défaut de Firefox setup TCP a 10 minutes de délai d'attente. Vous pouvez voir plus de détails avec
about:config
et de recherche pour le protocole TCP.Addons Firefox pouvez accéder à ces paramètres
et également modifier ces paramètres en spécifiant la direction générale & de préférence avec la nouvelle valeur
Alors maintenant, n'importe quel ordinateur avec l'addon installé avez un 10 secondes de délai d'attente pour les connexions TCP. Si la connexion est perdue, le
onclose
événement est déclenché, ce qui affiche une alerte et tente de ré-établir la connexionLe protocole websocket définit trames de contrôle pour ping et pong. Donc en gros, si le serveur envoie un ping, le navigateur va répondre avec un pong, et il devrait fonctionner également dans l'autre sens. Probablement le serveur WebSocket vous utilisez les met en œuvre, et vous pouvez définir un délai d'attente dans laquelle le navigateur doit répondre ou être considéré comme mort. Cela devrait être transparent pour votre mise en œuvre dans les deux navigateur et le serveur.
Vous pouvez les utiliser pour détecter la moitié de connexions ouvertes: http://blog.stephencleary.com/2009/05/detection-of-half-open-dropped.html
Aussi pertinent: Les WebSockets de ping/pong, pourquoi ne pas TCP keepalive?