Socket.io-client: Se connecter -> Déconnecter -> Se connecter ne fonctionne pas

Créé le 23 juil. 2011  ·  33Commentaires  ·  Source: socketio/socket.io-client

Le code suivant ne fonctionne pas pour moi:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); socket = io.connect ('http://host.com:8081');

C'est une solution de contournement que j'ai trouvée:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); supprimer io.sockets [' http://host.com : 8081']; io.j = []; socket = io.connect ('http://host.com:8081');

Unable to reproduce bug

Commentaire le plus utile

Utilisez celui-ci: io.connect(null,{'force new connection':true});

Tous les 33 commentaires

Même problème ici - impossible de se connecter-déconnecter-reconnecter comme vous l'avez décrit.

Cependant, j'ai trouvé que ce qui suit fonctionne. Curieusement, si vous omettez le setTimeout et vous reconnectez immédiatement (ou après un délai trop court), vous êtes immédiatement déconnecté.

var ns = io.connect(
        '/',
        { reconnect: false }
    ),
    numDisconnects = 2;

ns.on('connect', function () {

    console.log('Connected');

    if (numDisconnects > 0) {
        console.log('Disconnecting');
        ns.socket.disconnect();

        setTimeout(function () {
            console.log('Reconnecting');
            ns.socket.connect();
        }, 5000);
    }
    numDisconnects--;


});

ns.on('disconnect', function () {
    console.log('Disconnected');
});

socket = io.connect (hôte);
socket.disconnect ();
socket.socket.reconnect (); || socket.socket.connect (hôte);
fonctionne, mais depuis la reconnexion ou la deuxième connexion, la déconnexion est déclenchée toutes les deux secondes

J'ai eu le même problème, donc je n'ai pas pu terminer mon entrée knockout de nœud à temps à cause de ce bogue :(
Veuillez le réparer avant toute autre rupture cardiaque!

Aucune des solutions de contournement ci-dessus n'a fonctionné pour moi. Les gars, c'est un bouchon de spectacle sérieux. Pourquoi la balise "Impossible de reproduire"? Mon env. De test. est le dernier Chrome sur OS X 10.6.

Je vois la même chose. L'appel de io.connect() une deuxième fois échoue également sans erreur. Quelqu'un a-t-il trouvé une solution de contournement?

Utilisez celui-ci: io.connect(null,{'force new connection':true});

Comme c'est pratique et laid. Pourquoi ne pas supprimer io.sockets[uuri] = socket; de io.js:196 ? Quel est le point de cette ligne de frappe?

Malheureusement, même problème ici. Vous ne pouvez pas vous reconnecter après la déconnexion.

Seule chose qui a fonctionné pour moi après la déconnexion:
io.j = [];
io.sockets = [];

Edit: ce n'est pas seulement un problème de déconnexion côté client (). Il ne nettoie pas les structures de données lors de la déconnexion - vous pouvez voir que SocketNamespace. $ Events a toujours tous les rappels pour les connexions fermées, etc.

@MrJoes Utiliser io.connect(null,{'force new connection':true});

D'accord, est-ce vraiment l'API finale pour se reconnecter? Plutôt étrange.

@skrat Je suis d'accord avec vous. il devrait y avoir une API io.reconnect .

Je ne pense pas, io.connect puis io.disconnect puis io.connect devrait juste fonctionner, comme prévu.

@milani : et une fuite de mémoire en raison de sockets orphelins, de gestionnaires d'événements, etc. restant dans io.sockets []?

Pas très bonne idée pour être honnête.

@MrJoes Etes-vous sûr de la fuite de mémoire? @ 3rd-Eden de io.socket m'a dit d'utiliser cette API.

Peu importe, il n'ajoutera pas de socket à io.sockets [] si vous passez 'force new connection'.

Cependant, c'est un peu moche, en particulier avec les points de terminaison, car vous perdez le multiplexage - cela dépend du socket dans io.sockets pour effectuer le multiplexage.

La suggestion de
socket.socket.reconnect ()
Merci

Même problème ici - socket.reconnect () ne fonctionne pas pour moi, je vais essayer quelques autres solutions de contournement. C'est décevant cependant, c'est une fonctionnalité assez basique à insérer dans une mise à jour. Je suis sûr que de nombreuses applications ne peuvent pas être mises à jour facilement à cause de cela.

Si les développeurs ont besoin d'aide pour reproduire le problème, je suis heureux de vous aider - je suis surpris de voir la balise "impossible de reproduire" sur ce bogue.

Il semble qu'il y aura bientôt une mise à jour majeure à cause de cette pull request: https://github.com/LearnBoost/socket.io-client/pull/343
@cacois Essayez d'utiliser socket.socket.reconnect () plutôt que socket.reconnect ()

ah, bonne nouvelle :-)

@ wackfordjf3 Hé merci, bon appel. Fonctionne maintenant. :)

Toujours confronté à des problèmes de reconnexion.
La deuxième reconnexion provoque le déclenchement de plusieurs événements de reconnexion sur le serveur. (et cela se multiplie à chaque reconnexion ultérieure). Je déclenche des reconnexions sur un espace de noms.

socket = io.connect (url {'reconnect': false}); socket.disconnect; // 1er déconnexion
socket.socket.reconnect (); socket.disconnect (); // 2ème déconnexion
socket.socket.reconnect (); // 2ème reconnexion

Suis sur: prise. [email protected]

Suite à cela :
La manière laide fonctionne bien:
supprimer io.sockets [url]; io.j = [];
socket = io.connect (url);

Faites face à la même chose que les gens ont déjà ici; même bizarre dans le scénario d'espace de noms. Supprimez la solution pour l'espacement des noms:

var base = ' http: // localhost : 3000'
, canal = '/ chat'
, url = base + canal;

var socket = io.connect (url);

// appeler socket.disconnect () ne se déconnectera pas, donc:
io.sockets [base] .disconnect ();

// syntaxe de reconnexion.
supprimer io.sockets [base]; io.j = [];
socket = io.connect (url);

note: version socket.io - 0.9.0, plateforme: windows 7 home premium

J'ai passé un après-midi à lutter avec des tests unitaires qui expiraient parce que je ne pouvais pas me connecter après la déconnexion. {'force new connection': true} a résolu le problème. merci @milani

Même problème ici en utilisant Cucumber.js. Comme je dois créer et détruire des objets, j'avais face au même échec de connexion, de déconnexion, de connexion. Merci @milani et @rawberg

Ça marche pour moi! Merci @mrjoes.

Merci @milani

Le paramètre «forcer une nouvelle connexion» est maintenant appelé «forceNew» dans la version v1.0 pour ceux qui auraient pu rencontrer à nouveau ce problème.

J'ai poussé un commit pour ajouter BC avec ça, donc bientôt personne ne devrait plus avoir ce problème!

cela a fonctionné 4 moi, socket = io.connect (socketUrl, {'forceNew': true});

forceNew désactive tout le système de multiplexage des espaces de noms, est-ce vraiment la solution?

J'utilise:
socket = io.connect ()
...
// CE
socket.io.reconnect ()
..

Client.prototype.connect = function() {
    if (!this.connection) {
        this.connection = this.socket.connect(config.host + ':' + config.port);
    }
    else {
        if (!this.connection.connected) {
            this.connection.connect();
        }
    }
};

io.connect (null, {'forcer la nouvelle connexion': true});

cela résout mon problème, merci mr. milami

Cette page vous a été utile?
0 / 5 - 0 notes