Peerjs: DataChannel se cierra inesperadamente y sin motivo

Creado en 1 abr. 2015  ·  5Comentarios  ·  Fuente: peers/peerjs

Estoy experimentando algunos problemas con la transferencia de archivos usando PeerJS ... la transferencia avanza muy bien, y luego PeerJS simplemente cierra el DataChannel y no hay un registro de lo que salió mal. He activado la depuración para PeerJS y estoy ejecutando PeerServer localmente para poder obtener registros de depuración.

PeerJS inicia sesión en la consola de Chrome:

screen shot 2015-03-31 at 8 35 25 pm

... la transferencia va bien, y luego se registra la línea "DataChannel cerrado por: abc123_f9pes", la conexión muere y la transferencia muere.

PeerServer inicia sesión en la terminal:

screen shot 2015-03-31 at 8 35 45 pm

... la transferencia va bien, y luego se registran las 2 líneas de "Socket cerrado", seguidas de la muerte de la transferencia.

Mi primera pregunta es, ¿por qué PeerJS registra varias veces las líneas "Candidato ICE agregado para" y "Candidatos ICE recibidos para", y PeerServer las líneas "CANDIDATO de"?

Mi otra pregunta es, ¿por qué se está eliminando la conexión? Parece que el enchufe se está cerrando ... ¿alguna idea sobre lo que podría estar saliendo mal?

Aquí hay una descripción general de mi entorno:

  • PeerJS v0.3.13
  • PeerServer v0.2.8
  • Chrome v41
  • Mac OS X v10.10.2

ps, este problema persiste incluso cuando se ejecuta contra el PeerServer alojado en la nube.

Comentario más útil

@ UnsungHero97

Si se envían muchos mensajes juntos, no es posible que se transmitan todos a la vez. Se colocan en el búfer de entrada. Pero el búfer no puede crecer infinitamente; por lo general, tiene algún límite predeterminado. Si se excede el límite, entonces en Chrome> = 37 el canal de datos se cierra, todos los mensajes se descartan y se lanza una excepción. Sin embargo, en Chrome <= 36, solo se lanza una excepción. Así que este es un cambio que rompe la API que se realizó en Chrome 37. Los desarrolladores deben tener cuidado con este cambio si están tratando con navegadores antiguos.

Pequeña corrección: 16 KB, no 16 MB, para referencia futura. Enfrenté el mismo problema. El límite de Firefox es 16kiB (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) aproximadamente igual.

Todos 5 comentarios

Resulta que estaba leyendo el archivo demasiado rápido y el búfer del canal de datos WebRTC se llenó, que tiene un límite de 16 megabytes:

http://viblast.com/blog/2015/2/25/webrtc-bufferedamount/

Si se envían muchos mensajes juntos, no es posible que se transmitan todos a la vez. Se colocan en el búfer de entrada. Pero el búfer no puede crecer infinitamente; por lo general, tiene algún límite predeterminado. Si se excede el límite, entonces en Chrome> = 37 el canal de datos se cierra, todos los mensajes se descartan y se lanza una excepción. Sin embargo, en Chrome <= 36, solo se lanza una excepción. Así que este es un cambio que rompe la API que se realizó en Chrome 37. Los desarrolladores deben tener cuidado con este cambio si están tratando con navegadores antiguos.

Oh, Dios mío ... Encontré exactamente el mismo problema, con peerJS también y no pude encontrar ninguna respuesta (suponía que era algún tipo de cosa relacionada con el búfer). Gracias por una idea finalmente, espero que esto suceda. resolver mi problema. Es interesante que peerJS tenga un mecanismo interno de almacenamiento en búfer, que, según tengo entendido, se hizo correctamente para este problema, SIN EMBARGO, la implementación parece depender de la captura de excepción de no poder enviar, y si en el nuevo chunnel de Chrome simplemente se mata, esto el sistema ahora es redundante. Haré un problema aquí al respecto, tan pronto (si) estaré seguro de que esta es la razón.

Editar: sí parece legítimo, la cantidad almacenada en búfer ronda los 16 MB y todo falla.

Sí, este fue un error doloroso de descubrir. Me tomó días entender finalmente lo que estaba sucediendo. PeerJS debe actualizarse para manejar adecuadamente cuando el búfer del canal de datos se desborda y Chrome interrumpe la conexión.

Por cierto, si alguien se encuentra con esto, abrí un problema y publiqué allí una pequeña edición en la fuente de peer.js para solucionarlo https://github.com/peers/peerjs/issues/291

@ UnsungHero97

Si se envían muchos mensajes juntos, no es posible que se transmitan todos a la vez. Se colocan en el búfer de entrada. Pero el búfer no puede crecer infinitamente; por lo general, tiene algún límite predeterminado. Si se excede el límite, entonces en Chrome> = 37 el canal de datos se cierra, todos los mensajes se descartan y se lanza una excepción. Sin embargo, en Chrome <= 36, solo se lanza una excepción. Así que este es un cambio que rompe la API que se realizó en Chrome 37. Los desarrolladores deben tener cuidado con este cambio si están tratando con navegadores antiguos.

Pequeña corrección: 16 KB, no 16 MB, para referencia futura. Enfrenté el mismo problema. El límite de Firefox es 16kiB (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) aproximadamente igual.

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