2012-04-23 9 views
8

Supponiamo che la mia connessione di rete si interrompa per alcuni secondi e mi manca alcuni messaggi inviati dal server SignalR.Può SignalR gestire i messaggi persi?

Quando recupero la connettività di rete sono i messaggi persi persi? o il segnaleR li gestisce e li spinge fuori quando mi ricollego?

Se non è in grado di gestire i messaggi persi, qual è l'approccio consigliato per garantire la coerenza?

  • Polling periodicamente (2-3 minuti) per controllare i dati del server?
  • In qualche modo rilevare la perdita di rete sul lato client e fare una chiamata ajax per ottenere i dati sul ripristino della rete?
  • qualcos'altro?

risposta

7

Qui ci sono un paio di pensieri:

Se non si invia un sacco di messaggi al secondo, prevedere l'invio di alcun dato nei messaggi stessi. Invece, il messaggio è solo un "ping" ai client che dicono loro di andare a prendere i dati del server quando possono. Combina questo con un sondaggio periodico, come hai detto, e puoi essere certo che non ti perderai i messaggi. Potrebbero essere in ritardo.

Se si inviano molti messaggi rapidamente, che ne dici di aggiungere un ID sequenziale a ciascuno di essi? Pensa a una colonna Identity SQL. I tuoi clienti dovrebbero tenere traccia dell'ID più recente ricevuto. Dopo che una rete si riconnette, il client potrebbe chiedere tutti i messaggi da [Ultimo ID]. Se viene ricevuto un messaggio il cui ID non è contiguo con il più recente ricevuto, si sa che c'era una disconnessione e può chiedere al server le informazioni mancanti.

+1

Idea interessante, mi piace il secondo, anche se sarebbe bello se SignalR avesse concluso questa funzionalità per noi ... forse in una versione successiva credo! – reach4thelasers

+1

Capisco quello che vuoi, ma l'idea alla base della messaggistica è il fuoco e dimenticare. Quindi non vedo questo come un essere un pezzo fondamentale di signalR. Sono d'accordo con la soluzione alternativa che @MikeC suggerisce come una buona opzione. –

+0

Abbiamo qualche opzione o funzione da attivare e disattivare come "Drop Messages randomly" in SignalR? – Kurkula

Problemi correlati