Pergunta

Esta questão já tem uma resposta aqui:

Eu tenho um sistema cliente-servidor, ambos os lados escritos por mim, e eu gostaria de colocar os clientes em um estado 'offline' quando os servidor desconecta / morre, e então automaticamente trazê-los de volta 'online' quando o servidor está disponível novamente.

Para a primeira parte, eu escuto para eventos e alça de canal falha que, definindo o cliente para offline. Eu, então, começar a chamar um serviço de 'ping' no servidor (a cada 30 seg.), Que retorna apenas um bool se ele está vivo. Uma vez que ele está vivo o cliente recebe o bool e volta online.

Esta todas as obras, o problema que estou tendo é que quando o cliente chama o serviço de ping eo servidor está em baixo, nenhuma resposta é enviada (obviamente) e, eventualmente, após cerca de 2mins eu recebo um endpoint não encontrado exceção. A essa altura eu já tentou mais 3-4 pings e, portanto, têm 3-4 exceções cervejeira.

A minha pergunta é, como posso lidar com o serviço de ping mais graciosamente? Idealmente, eu gostaria de chamar periodicamente um serviço que me permite saber se é on-line, e imediatamente me permite saber se não é.

Foi útil?

Solução

O que sobre isso:

  • Se você detectar uma desconexão do servidor, digite um modo "Ping"
  • no "modo de ping", você define o cliente "SendTimeout" a algo muito curto, por exemplo, algo como 2 segundos ou mais, uma vez que a sua chamada para o método Ping do serviço deverá ser respondida quase imediatamente
  • Uma vez que seu "Ping" trabalhado com sucesso, você novamente recriar o proxy do cliente e definir o cliente "SendTimeout" de volta para o valor original (padrão é 1 minuto - depende do que faz sentido para você, 15 segundos, 30 segundos - qualquer que seja)

Dessa forma, se você está em "modo de Ping", você começa suas respostas (ou tempos de espera) rapidamente e você pode detectar a disponibilidade do serviço rapidamente.

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