var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
ws.send(JSON.stringify({
.... some message the I must send when I connect ....
}));
};
ws.onmessage = function (e) {
console.log('Got a message')
console.log(e.data);
};
ws.onclose = function(e) {
console.log('socket closed try again');
}
ws.onerror = function(err) {
console.error(err)
};
Lorsque je me connecte pour la première fois au socket, je dois d'abord envoyer un message au serveur pour m'authentifier et m'abonner aux canaux.
Le problème que j'ai est que parfois le serveur de socket n'est pas fiable et cela déclenche les événements onerror
et onclose
des 'ws'
objet.
Question: Quel est un bon modèle de conception qui me permettrait, chaque fois que le socket se ferme ou rencontre une erreur, attendez 10 secondes, puis reconnectez-vous au serveur de socket (et renvoyez le message initial au serveur)
Voici ce que j'ai fini avec. Cela fonctionne à mes fins.
function connect() {
var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function() {
// subscribe to some channels
ws.send(JSON.stringify({
//.... some message the I must send when I connect ....
}));
};
ws.onmessage = function(e) {
console.log('Message:', e.data);
};
ws.onclose = function(e) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
setTimeout(function() {
connect();
}, 1000);
};
ws.onerror = function(err) {
console.error('Socket encountered error: ', err.message, 'Closing socket');
ws.close();
};
}
connect();
J'ai trouvé une solution très utile pour la production. faire référence à:
http://www.phpernote.com/html5/1370.html