Domanda

    

Questa domanda ha già una risposta qui:

         

Ho un sistema client-server, scritto da entrambe le parti, e vorrei mettere i client in uno stato 'offline' quando il server si disconnette / muore, e quindi riportarli automaticamente 'online' quando il server è di nuovo disponibile.

Per la prima parte, ascolto gli eventi con errore del canale e lo gestisco impostando il client su offline. Comincio quindi a chiamare un servizio "ping" sul server (ogni 30 secondi) che restituisce un bool se è attivo. Una volta che è vivo, il client ottiene il bool e torna online.

Tutto funziona, il problema che sto riscontrando è che quando il client chiama il servizio ping e il server è inattivo, nessuna risposta viene inviata (ovviamente) e alla fine, dopo circa 2 minuti ottengo un'eccezione non trovata nell'endpoint. A questo punto ho già provato altri 3-4 ping e quindi ho fatto 3-4 eccezioni.

La mia domanda è: come posso gestire il servizio ping in modo più elegante? Idealmente, vorrei chiamare periodicamente un servizio che mi fa sapere se è online e mi fa sapere immediatamente se non lo è.

È stato utile?

Soluzione

Che dire di questo:

  • se rilevi una disconnessione del server, inserisci un " Ping " modalità
  • nella modalità " ping " ;, imposti il ??client " sendTimeout " a qualcosa di molto breve, ad es. circa 2 secondi circa, poiché la tua chiamata al metodo Ping del servizio dovrebbe ricevere una risposta quasi immediatamente
  • una volta che " Ping " ha funzionato correttamente, ricrea nuovamente il proxy client e imposta il "sendTimeout" del client torna al valore originale (il valore predefinito è 1 minuto - dipende da cosa ha senso per te, 15 secondi, 30 secondi - qualunque cosa)

In questo modo, se sei in " modalità Ping " ;, ottieni rapidamente le tue risposte (o timeout) e puoi rilevare rapidamente la disponibilità del servizio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top