2012-10-04 16 views
8

Utilizzo hub SignalR (0.5.3) per un'app di chat in cui ogni sequenza di tasti viene inviata al server (salvata nel DB), inoltrata a tutti i client e un valore restituito (a token di stringa di ordinamento) viene rinviato dal server.Gestione connessione SignalR su riciclo pool di app

Funziona correttamente, finché il pool di app non si ricicla, quindi smette di inoltrare le sequenze di tasti a tutti i client (perché lo stato del server in memoria è perso suppongo) e il server non restituisce alcun valore. A questo punto, suppongo che tutte le richieste via SignalR siano accodate da IIS e quindi elaborate una volta che il pool di app è stato riciclato.

La mia domanda è: come posso gestire questo scenario in modo che tutti i client siano a conoscenza della indisponibilità/ritardo del server a causa del riciclo del pool di applicazioni, avvisare l'utente di attendere un po 'e quindi riprendere a riconnettersi?

risposta

4

Ci sono due opzioni.

Per 0,5.3 è possibile rilevare quando il client va in "riconnessione" o è "disconnesso" e informa l'utente che ci sono problemi del server. Tieni presente che nella maggior parte dei casi il client non sa che è disconnesso se il server si spegne.

O

Se si attende per il prossimo rilascio (1.0alpha) ci prenderemo cura della maggior parte di questo per voi. In caso di mancanza di un server, verrà attivato un evento onConnectionSlow che comporterà il trasferimento del client nello stato "Riconnetti" (se non riceve alcuna informazione) fino a quando il server non ritorna online. Il client saprà anche se il server va via (stiamo aggiungendo questa funzionalità) per casi limite come il riciclo di un pool di app.

Spero che questo aiuti!

+0

Sulle opzioni 1: hai ragione, il client viene a conoscenza della disconnessione solo dopo un ritardo prolungato (timeout), quindi la gestione tramite gli eventi di riconnessione/disconnessi potrebbe non funzionare ma farò comunque un tentativo. – Nick

+0

@Taylor Mullen - Ciao, ho ragione a pensare che questo significa che a partire da 0.5.3 se il server signalr si allontana, il client può rimanere bloccato cercando di riconnettersi fino a un timeout, e non ci sono eventi sul lato client che possono essere usato per rilevare questo al momento? Cheers Will – Will

+0

@Sarà parzialmente corretto. In 0.5.3 NON riceverai alcun evento specifico come "nowReconnecting" ma puoi rilevare che SignalR sta tentando di riconnettersi tramite l'evento stateChanged. Quando entriamo nello stato di riconnessione, l'evento stateChanged si attiva e il nuovo stato della connessione si riconnetterà. Inoltre, non c'è timeout sul client, proverà a riconnettersi per sempre. –

Problemi correlati