Comment se reconnecter à websocket après une connexion étroite

je construis ma connexion websocket avec ce code (e.g.):

var socket = new WebSocket("ws://94.12.176.177:8080");

Et je ferme la connexion avec celui-ci:

socket.close();

mais comment rétablir la connexion?

j'ai fait quelques recherches et essayé plusieurs méthodes. Cette question ne pouvait pas m'aider: Socket.je me reconnecte en déconnectant? C'est le seul résultat qui soit proche de ce que je cherche.

le la raison pour laquelle je veux faire cela est de permettre aux utilisateurs d'arrêter d'envoyer des données sur le web temporaire, et de reprendre après une période de temps. Sans reconnexion, l'utilisateur doit rafraîchir la page pour pouvoir la renvoyer. Cela peut causer la perte de certaines données. Remercier.

32
demandé sur Community 2012-12-10 12:24:21

3 réponses

vous devrez recréer la prise pour qu'elle se reconnecte. Le seul problème avec ça, c'est que vous devrez rattacher vos maîtres.

mais les websockets sont conçus pour rester ouverts.

une meilleure méthode serait que le serveur ferme la connexion . De cette façon, le websocket déclenche une onclose événement, mais continuera de tenter d'établir la connexion. Lorsque le serveur est à nouveau à l'écoute la connexion sera automatiquement rétablie.

14
répondu Jivings 2017-03-28 13:02:16

lorsque le serveur ferme la connexion, le client n'essaie pas de se reconnecter. Avec quelques cadres JS peut-être, mais la question était, au moment de cette réponse, étiqueté comme JS de vanille simple.

je suis un peu frustré parce que la réponse acceptée et rétrogradée est clairement erronée, et cela m'a coûté un peu plus de temps tout en trouvant la bonne solution.

qui est ici: Reconnection du Client lorsque le serveur redémarrage en WebSocket

49
répondu SzG 2017-05-23 10:31:33

Impeccable mise en œuvre:

var socket;

const socketMessageListener = (event) => {
  console.log(event.data);
};

const socketOpenListener = (event) => {
  console.log('Connected');
  socket.send('hello');
};

const socketCloseListener = (event) => {
  if (socket) {
    console.error('Disconnected.');
  }
  socket = new WebSocket('ws://localhost:8080');
  socket.addEventListener('open', socketOpenListener);
  socket.addEventListener('message', socketMessageListener);
  socket.addEventListener('close', socketCloseListener);
};

socketCloseListener();

pour le tester:

setTimeout(()=>{
  socket.close();
},5000);

Edit: prenez note de l'implémentation de Backoff exponentielle (sur le thread lié par le Commentaire du haut: https://stackoverflow.com/a/37038217/8805423 ), pas dans le code ci-dessus, mais très très CRUCIAL.

éditer à nouveau: Vérifier back de primus : https://www.npmjs.com/package/back , c'est une implémentation sexy flexible.

2
répondu xemasiv 2017-12-14 22:26:52