web-dev-qa-db-fra.com

Jak konfigurovat opětovné připojení v socket.io?

Vytvořím socket.io spojení s dalším kódem

var socket = new io.connect('http://localhost:8181', {
    'reconnect': true,
    'reconnection delay': 500,
    'max reconnection attempts': 50
});

Serveur Ale když zabijuCTRL+Ca znovu ho spusťte, opětovné připojení se neděje. Ale odpojit událost na straně klienta. Co možná důvod?

26
Dmitro

C'est une vieille question, mais pour d'autres personnes comme moi qui cherchent à configurer la reconnexion dans socket.io (1.x) voici une syntaxe correcte:

var socket = new io.connect('http://localhost:8181', {
    'reconnection': true,
    'reconnectionDelay': 1000,
    'reconnectionDelayMax' : 5000,
    'reconnectionAttempts': 5
});
29
Salvador Dali

Je me rends compte que c’est une vieille question, mais j’ai eu quelques problèmes avec la reconnexion de sockets io et j’ai trouvé ce post élevé dans les résultats de la recherche, alors j’ai pensé contribuer. Essayez de déboguer exactement quels événements sont déclenchés en utilisant le code suivant:

# coffeescript. compile if you're writing javascript, obviously.

socket.on 'connect',-> console.log 'connected'
socket.on 'reconnect',-> console.log 'reconnect'
socket.on 'connecting',-> console.log 'connecting'
socket.on 'reconnecting',-> console.log 'reconnecting'
socket.on 'connect_failed',-> console.log 'connect failed'
socket.on 'reconnect_failed',-> console.log 'reconnect failed'
socket.on 'close',-> console.log 'close'
socket.on 'disconnect',-> console.log 'disconnect'

Cela devrait vous donner plus d'informations sur l'état du socket client.

Essayez également de consulter l'onglet Réseau de votre inspecteur Web pour voir s'il renvoie les demandes XHR comme solution de secours. Enfin, dans votre console Web, essayez de saisir io.sockets et développez-le pour voir s'il tente réellement de se reconnecter ou non.

J'ai rencontré des problèmes avec reconnect_failed qui ne se déclenche pas et la reconnexion ne réinitialise pas. Vous trouverez ci-dessous des liens vers des discussions sur ces problèmes sur github.

délai de reconnexion - déconnexion exponentielle ne réinitialisant pas correctement

reconnect_failed n'est jamais renvoyé

quelques solutions potentielles/solutions de contournement

10
captainclam

C'est une vieille question, mais j'avais la même question (pour une raison différente) lorsque j'utilisais la v1.4.5. Mon application de salle de conversation fonctionnait à merveille, mais lorsque j'ai appuyé sur Ctrl+C dans le terminal, mon navigateur a continué à effectuer une boucle et à signaler ERR_CONNECTION_REFUSED toutes les quelques secondes jusqu'à ce que je le ferme.

Changer une réponse précédente m'a juste donné la solution.

Pour la v1.4.5, voici mon code d'origine pour "var socket" dans mon fichier js client:

    var socket = io();

Et voici la solution:

    var socket = io({
        'reconnection': true,
        'reconnectionDelay': 1000,
        'reconnectionDelayMax' : 5000,
        'reconnectionAttempts': 5
    });

Évidemment, je pouvais changer les valeurs si je le voulais, mais le point important est que cela a tué les demandes de reconnexion sans fin.

6
elmeltone

le délai de reconnexion est trop petit, augmentez de 500 ms, ce qui signifie 50 tentatives supplémentaires, ce qui signifie 500 * 50 = 25 000 ms, soit 25 secondes. Si cela ne vous aide pas, définissez un événement de délai d'attente sur erreur côté client pour recréer l'objet socket (Après une erreur et un délai supplémentaire, essayez de créer une connexion).

0
MaX