Estou usando o web socket usando PHP5 e o navegador Chrome como cliente. Peguei o código do site http://code.google.com/p/phpwebsocket/ .
Eu executo o servidor e o cliente também está conectado. Eu também posso conversar. Agora, quando eu reinicio o servidor (matando-o e iniciando-o novamente), o cliente obtém as informações desconectadas, mas automaticamente não se reconecta ao servidor quando envio a mensagem.
Como fazer isso? Por exemplo, quando recebo as informações desconectadas, devo verificá-las e enviá-las ao JavaScript para atualizar a página ou reconectar?
fonte
start
recursivamente, sem nunca retornar.A solução dada por Andrew não está funcionando perfeitamente porque, em caso de perda de conexão, o servidor pode enviar vários eventos de fechamento.
Nesse caso, você definirá vários setTimout's. A solução dada por Andrew só pode funcionar se o servidor estiver pronto antes de cinco segundos.
Então, com base na solução Andrew, retrabalhada, usei setInterval anexando o ID ao objeto janela (dessa forma, ele está disponível "em qualquer lugar"):
fonte
setTimeout
se aplicar a ideia "id do cronômetro global" a eles;)onclose
evento será disparado novamente.ReconnectingWebSocket
O GitHub hospeda uma pequena biblioteca JavaScript que decora a API WebSocket para fornecer uma conexão WebSocket que será reconectada automaticamente se a conexão for interrompida.
A biblioteca reduzida com compactação gzip tem menos de 600 bytes.
O repositório oficial está disponível aqui:
https://github.com/joewalnes/reconnecting-websocket
Inundação de servidor
Se um grande número de clientes estiver conectado ao servidor quando ele for reinicializado. Pode valer a pena gerenciar os tempos de reconexão dos clientes usando um algoritmo Exponential Backoff.
O algoritmo funciona assim:
Referência:
http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app
fonte
Estou usando esse padrão há algum tempo para JavaScript puro e simples e ele suporta mais alguns casos do que as outras respostas.
Isso tentará novamente assim que o servidor fechar a conexão e verificará a conexão para ter certeza de que também está ativa a cada 5 segundos.
Portanto, se o servidor não estiver ativo quando isso for executado ou no momento do evento onclose, a conexão ainda voltará quando estiver online novamente.
NOTA: Usar este script não vai permitir que você pare de tentar abrir uma conexão ... mas acho que é isso que você quer?
fonte
Abaixo estão os códigos que usei no meu projeto que funcionam 100%.
var name = sessionStorage.getItem ('nome');
fonte
Não posso comentar, mas o seguinte:
Além disso, https://www.npmjs.com/package/back já é bom o suficiente :)
fonte
fonte
Finalmente, eu faço ws reconectar automaticamente em vue + ts, semelhante ao seguinte:
fonte
O evento de fechamento do lado do cliente para WebSocket tem uma propriedade wasClean , que foi útil para mim. Parece que está definido como verdadeiro nos casos em que o computador cliente entra em modo de suspensão etc. ou quando o servidor é interrompido inesperadamente etc. É definido como falso se você fechar manualmente o soquete, caso em que não deseja abrir o soquete automaticamente novamente. Abaixo o código de um projeto Angular 7. Eu tenho esse código em um serviço, então ele pode ser usado em qualquer componente.
fonte