Je cherchais une solution au problème "WebSocket est déjà à l'état FERMETURE ou FERMÉE" et j'ai trouvé ceci:
La réponse n ° 1 concerne strictement Meteor et n ° 2 ne contient pas de réponse ... J'ai une application serveur de nœud avec un socket:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(socket) {
socket.on('message', function incoming(data) {
console.log('Incoming data ', data);
});
});
Et les clients se connectent comme ceci:
const socket = new WebSocket('ws://localhost:3090'); //Create WebSocket connection
//Connection opened
socket.addEventListener('open', function(event) {
console.log("Connected to server");
});
//Listen to messages
socket.addEventListener('message', function(event) {
console.log('Message from server ', event);
});
Cependant, après quelques minutes, les clients se déconnectent de manière aléatoire et la fonction
socket.send(JSON.stringify(data));
Lance alors un "WebSocket est déjà à l'état CLOSING ou CLOSED.".
Je cherche un moyen de détecter et de gérer ces déconnexions et de tenter immédiatement de me reconnecter.
Quel est le moyen le plus correct et efficace de le faire?
Le moyen le plus simple est de vérifier si le socket est ouvert ou non avant l'envoi.
Par exemple, écrivez une fonction simple:
function isOpen(ws) { return ws.readyState === ws.OPEN }
Ensuite, avant tout socket.send
, assurez-vous qu'il est ouvert:
if (!isOpen(socket)) return;
socket.send(JSON.stringify(data));
Vous pouvez également réécrire la fonction send
comme cette réponse mais à ma façon, vous pouvez enregistrer ces situations.
Et pour votre seconde demande
essayez immédiatement de vous reconnecter
Vous ne pouvez pas le faire depuis le serveur.
Le code client doit surveiller l'état de WebSocket et appliquer une méthode de reconnexion en fonction de vos besoins.
Par exemple, vérifiez this VueJS library qui le fait bien. Regardez la section Enable ws reconnect automatiquement