Pergunta

Eu vi como você pode interceptar um evento de desconexão no lado do cliente com SignalR vinculando-se ao evento .disconnect.

Agora que fiz isso, quero colocar o cliente em um "ciclo de espera para reconectar", em que ele tenta se conectar continuamente até ter sucesso ou até que o usuário cancele.O hub expõe uma propriedade de estado de conexão?Estou pensando em algo como (pseudo código)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
Foi útil?

Solução

O cliente JS tenta se reconectar por um determinado período, que o padrão é 110 segundos.Você pode se inscrever no evento connection.stateChanged e obter atualizações sobre quando o estado muda para que você possa exibi-lo para o usuário ou validar a resposta do SignalR a diferentes cenários de desconexão.

Em meus testes, o estado foi atualizado corretamente para desconectado e reconectando etc., como você esperaria.

Mais informações sobre o signalrconexões

function connectionStateChanged(state) {
    var stateConversion = {0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected'};
    console.log('SignalR state changed from: ' + stateConversion[state.oldState]
     + ' to: ' + stateConversion[state.newState]);
}

connection = $.connection(signalR_Endpoint);
connection.stateChanged(connectionStateChanged);
connection.start({ waitForPageLoad: false });

Outras dicas

O cliente está sempre tentando se conectar.Você não precisa se preocupar com isso. Há um evento reconectado que você pode ouvir, caso queira fazer algo quando a conexão for restabelecida com sucesso.

EDITAR: Isso mudou, o cliente só tenta se reconectar durante um certo período de tempo.Depois disso, você deve capturar o evento de desconexão e reiniciar manualmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top