Socket.io-client: Conectar -> Desconectar -> Conectar no funciona

Creado en 23 jul. 2011  ·  33Comentarios  ·  Fuente: socketio/socket.io-client

El siguiente código no me funciona:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); socket = io.connect ('http://host.com:8081');

Esta es una solución alternativa que encontré:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); eliminar io.sockets [' http://host.com : 8081']; io.j = []; socket = io.connect ('http://host.com:8081');

Unable to reproduce bug

Comentario más útil

Utilice este: io.connect(null,{'force new connection':true});

Todos 33 comentarios

El mismo problema aquí: no se pudo conectar, desconectar y reconectar de la forma que describió.

Sin embargo, descubrí que lo siguiente funciona. Curiosamente, si omite setTimeout y se vuelve a conectar inmediatamente (o después de un tiempo de espera demasiado corto), se desconecta inmediatamente.

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 (host);
socket.disconnect ();
socket.socket.reconnect (); || socket.socket.connect (host);
funciona, pero dado que la reconexión o la segunda conexión, la desconexión se activa cada dos segundos

Tuve el mismo problema, así que no pude terminar la entrada de eliminación de mi nodo a tiempo debido a este error :(
¡Por favor, arréglalo antes de cualquier otro desamor!

Ninguna de las soluciones anteriores funcionó para mí. Chicos, esto es un obstáculo serio. ¿Por qué la etiqueta "No se puede reproducir"? Mi env de prueba. es la última versión de Chrome en OS X 10.6.

Veo lo mismo. También la llamada a io.connect() por segunda vez falla sin error. ¿Alguien encontró una solución alternativa?

Utilice este: io.connect(null,{'force new connection':true});

Qué conveniente y feo. ¿Qué hay de eliminar io.sockets[uuri] = socket; de io.js:196 ? ¿Cuál es el punto de ese chiste?

Desafortunadamente, el mismo problema aquí. No puede volver a conectarse después de la desconexión.

Lo único que funcionó para mí después de la desconexión:
io.j = [];
io.sockets = [];

Editar: no es solo un problema de la desconexión del lado del cliente (). No limpia las estructuras de datos al desconectarse; puede ver que SocketNamespace. $ Events todavía tiene todas las devoluciones de llamada para conexiones cerradas, etc.

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

Muy bien, ¿es esta realmente la API final para volver a conectar? Bastante extraño.

@skrat Estoy de acuerdo contigo. debería haber una io.reconnect API.

No lo creo, io.connect luego io.disconnect luego io.connect debería funcionar, como se esperaba.

@milani : ¿y pérdida de memoria debido a sockets huérfanos, controladores de eventos, etc. que permanecen en io.sockets []?

No es muy buena idea para ser honesto.

@MrJoes ¿Estás seguro de la pérdida de memoria? @ 3rd-Eden de io.socket me dijo que usara esta API.

No importa, no agregará socket a io.sockets [] si pasa 'forzar nueva conexión'.

Sin embargo, es un poco feo, especialmente con los puntos finales, porque está perdiendo la multiplexación: se basa en el socket en io.sockets para realizar la multiplexación.

La sugerencia de
socket.socket.reconnect ()
Gracias

El mismo problema aquí: socket.reconnect () no funciona para mí, intentaré algunas otras soluciones. Sin embargo, esto es decepcionante, es una pieza bastante básica de funcionalidad para romper en una actualización. Estoy seguro de que muchas aplicaciones no pueden actualizarse fácilmente debido a esto.

Si los desarrolladores necesitan ayuda para reproducir el problema, me complace ayudar; me sorprende ver la etiqueta "no se puede reproducir" en este error.

Parece que pronto habrá una actualización importante debido a esta solicitud de extracción: https://github.com/LearnBoost/socket.io-client/pull/343
@cacois Intenta usar socket.socket.reconnect () en lugar de socket.reconnect ()

ah, buenas noticias :-)

@ wackfordjf3 Hola, gracias, buena

Aún enfrenta problemas con la reconexión.
La segunda reconexión provoca que se activen varios eventos de reconexión en el servidor. (y esto se multiplica con cada reconexión posterior). Estoy disparando se vuelve a conectar en un espacio de nombres.

socket = io.connect (url {'reconectar': falso}); socket.disconnect; // Primera desconexión
socket.socket.reconnect (); socket.disconnect (); // 2da desconexión
socket.socket.reconnect (); // 2do reconexión

Estoy en: enchufe. [email protected]

Además de esto :
La forma fea funciona bien:
eliminar io.sockets [url]; io.j = [];
socket = io.connect (url);

Enfréntate a lo mismo que la gente ya tiene aquí; incluso extraño en el escenario del espacio de nombres. Elimine la solución para el espacio de nombres:

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

var socket = io.connect (url);

// la llamada a socket.disconnect () no se desconectará, así que:
io.sockets [base] .disconnect ();

// volver a conectar la sintaxis.
eliminar io.sockets [base]; io.j = [];
socket = io.connect (url);

nota: versión socket.io - 0.9.0, plataforma: windows 7 home premium

Pasé una tarde luchando con pruebas unitarias que se agotaban porque no podía conectarme después de desconectarme. {'forzar nueva conexión': true} resolvió el problema. gracias @milani

El mismo problema aquí usando Cucumber.js. Como tengo que crear y destruir objetos, me estaba enfrentando al mismo conectar, desconectar, conectar falló. Thx @milani y @rawberg

¡Esto funciona para mi! Gracias @mrjoes.

Gracias @milani

La configuración de 'forzar nueva conexión' ahora se llama 'forceNew' en la versión v1.0 para aquellos que podrían haberse encontrado con este problema nuevamente.

Presioné un compromiso para agregar BC con eso, ¡así que pronto nadie debería tener este problema más!

funcionó 4 me, socket = io.connect (socketUrl, {'forceNew': true});

forceNew desactiva todo el sistema de multiplexación del espacio de nombres, ¿es esa realmente la solución?

Estoy usando:
socket = io.connect ()
...
// ESTA
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, {'forzar nueva conexión': verdadero});

esto resuelve mi problema, gracias mr. milami

¿Fue útil esta página
0 / 5 - 0 calificaciones