Estoy usando un socket web usando PHP5 y el navegador Chrome como cliente. Tomé el código del sitio http://code.google.com/p/phpwebsocket/ .
Ejecuto el servidor y el cliente también está conectado. Yo también puedo charlar. Ahora, cuando reinicio el servidor (matándolo y volviéndolo a iniciar), el cliente obtiene la información desconectada, pero automáticamente no se vuelve a conectar con el servidor cuando envío el mensaje.
¿Cómo lograrlo? Como cuando obtengo la información desconectada, ¿debo verificarla y enviarla a JavaScript para actualizar la página o reconectarme?
fuente
start
recursiva, sin volver jamás.La solución dada por Andrew no funciona perfectamente porque, en caso de pérdida de conexión, el servidor puede enviar varios eventos cercanos.
En ese caso, establecerá varios setTimout. La solución dada por Andrew solo puede funcionar si el servidor está listo antes de cinco segundos.
Luego, en base a la solución de Andrew, reelaborada, utilicé setInterval adjuntando la ID al objeto de la ventana (de esa manera está disponible "en todas partes"):
fuente
setTimeout
si les aplica la idea de "ID de temporizador global";)onclose
evento se activará nuevamente.Reconectando WebSocket
GitHub aloja una pequeña biblioteca de JavaScript que decora la API de WebSocket para proporcionar una conexión WebSocket que se volverá a conectar automáticamente si la conexión se interrumpe.
La biblioteca minimizada con compresión gzip tiene menos de 600 bytes.
El repositorio oficial está disponible aquí:
https://github.com/joewalnes/reconnecting-websocket
Inundación del servidor
Si hay una gran cantidad de clientes conectados al servidor cuando se reinicia. Puede ser útil administrar los tiempos de reconexión de los clientes mediante el uso de un algoritmo de retroceso exponencial.
El algoritmo funciona así:
Referencia:
http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app
fuente
He estado usando este patrón durante un tiempo para JavaScript puro de vainilla, y admite algunos casos más que las otras respuestas.
Esto volverá a intentar tan pronto como el servidor cierre la conexión y verificará la conexión para asegurarse de que esté activa también cada 5 segundos.
Por lo tanto, si el servidor no está activo cuando esto se ejecuta o en el momento del evento de cierre, la conexión aún volverá una vez que esté en línea.
NOTA: El uso de este script no le permitirá dejar de intentar abrir una conexión ... pero creo que eso es lo que quiere.
fuente
A continuación se muestran los códigos que he usado en mi proyecto que funcionan al 100%.
var name = sessionStorage.getItem ('nombre');
fuente
No puedo comentar, pero lo siguiente:
Además, https://www.npmjs.com/package/back ya es suficientemente bueno :)
fuente
fuente
Finalmente, hago que ws se vuelva a conectar automáticamente en vue + ts, similar a lo siguiente:
fuente
El evento de cierre del lado del cliente para WebSocket tiene una propiedad wasClean , que fue útil para mí. Parece que se establece en verdadero en los casos en que la computadora cliente entra en modo de suspensión, etc. o cuando el servidor se detiene inesperadamente, etc. Se establece en falso si cierra manualmente el socket, en cuyo caso no desea abrir el enchufe automáticamente de nuevo. Debajo del código de un proyecto de Angular 7. Tengo este código en un servicio, por lo que se puede utilizar desde cualquier componente.
fuente