Socket.io-client: La desconexión v3 del socket parece cerrar la conexión subyacente.

Creado en 16 nov. 2020  ·  4Comentarios  ·  Fuente: socketio/socket.io-client

Tú quieres:

  • [x] informar un error
  • [] solicitar una función

Comportamiento actual

Después de actualizar a v3, cuando llamo a socket.disconnect() en el lado del cliente o del servidor, parece que la conexión subyacente del administrador también se está cerrando; todos los demás sockets que usan el mismo administrador / conexión subyacente también se desconectan.

No sé dónde presentar este problema. ¿Quizás tiene root en engine.io v4?

Aquí hay una diferencia de mi proyecto durante la actualización . Me disculpo porque también contiene algunos cambios no relacionados. Lo principal que quiero destacar es que no realicé ningún cambio en la forma en que configuro y administro las conexiones (puede cmd + F para "desconectar", "cerrar", "io.socket").

Pasos para reproducir (si el comportamiento actual es un error)

Consulte este jsfiddle .

Comportamiento esperado

El comportamiento v2 es que llamar a socket.close() en el lado del cliente y en el lado del servidor solo debe cerrar ese socket cuando un administrador tiene múltiples espacios de nombres; no debe cerrar todos los socket multiplexados debajo del administrador de ese socket.

Configuración

  • SO: Windows 10
  • navegador: Chrome 86.0
  • versión de socket.io: 3.0.0

Observe la diferencia de comportamiento al usar socket.io v2 en su lugar.

Otra información (p. Ej., Seguimiento de pila, problemas relacionados, sugerencias de cómo solucionarlo)

Todos 4 comentarios

Pasé mucho tiempo depurando mi propio código pensando que rompí algo: ')

¡Esperamos la solución! Y gracias de nuevo por su arduo trabajo al iniciar la v3.

El evento "conectando" nunca se dispara en la conexión de socket y no llena la matriz connecting en el administrador:
https://github.com/socketio/socket.io-client/blame/master/lib/manager.ts#L599

Cuando se llama a _destroy if (this.connecting.length) return; this._close(); siempre cerrará la conexión.

No veo ningún problema en el código del cliente. En el código del servidor no pude encontrar ningún evento llamado "conexión".

Aquí está el compromiso que elimina la emisión de "conectar".

https://github.com/socketio/socket.io-client/commit/b60e909039d4bbb979d32ec86ac16c5398526b44#diff -f0e64910289a49966c99ceadaa5637404e3439ec0812a4bdb7003fe1e5a33d1c

@darrachequesne ¿Podría comprobar este problema?

@ david-fong De hecho, pude reproducir el problema, muchas gracias por los pasos detallados: +1:

Esto debe solucionarse en https://github.com/socketio/socket.io-client/commit/f8f60fc860f51aa6465fc32dd9275a8e1d22f05d (incluido en [email protected] ).

Nuevamente, gracias por el informe detallado, ¡eso realmente ayuda!

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