2012-04-23 16 views
8

Powiedz, że moje połączenie sieciowe znika na kilka sekund i brakuje mi niektórych wiadomości wysłanych przez serwer SignalR.Czy SignalR może obsługiwać nieodebrane wiadomości?

Kiedy odzyskaję połączenie sieciowe, wiadomości, które utraciłem? lub czy signalR poradzi sobie z nimi i wypchnie je, kiedy ponownie się połączę?

Jeśli nie może obsłużyć brakujących wiadomości, jakie jest zalecane podejście w celu zapewnienia spójności?

  • Ankieta okresowa (2-3 minuty) do sprawdzenia danych serwera?
  • Jakoś wykryć utratę sieci po stronie klienta i wykonać wywołanie ajax, aby uzyskać dane dotyczące przywracania sieci?
  • coś jeszcze?

Odpowiedz

7

Oto kilka myśli:

Jeśli nie wysyłasz dużo wiadomości na sekundę, rozważyć wysłanie żadnych danych w samych wiadomości. Zamiast tego, komunikat jest po prostu "pingem" do klientów, którzy mówią im, aby pobierać dane serwera, kiedy tylko mogą. Połącz to z periodyczną ankietą, tak jak powiedziałeś, i możesz być pewny, że nie przegapisz wiadomości. Mogą się opóźnić.

Jeśli wysyłasz dużo wiadomości szybko, a co powiesz o dodawaniu identyfikatora sekwencyjnego do każdego z nich? Pomyśl o kolumnie Tożsamość SQL. Twoi klienci będą musieli śledzić najnowszy odebrany identyfikator. Po ponownym nawiązaniu połączenia przez sieć klient może prosić o wszystkie wiadomości od [Last ID]. Jeśli otrzymasz wiadomość, której identyfikator nie jest przyległy do ​​ostatnio otrzymanego, wiesz, że nastąpiło rozłączenie i możesz poprosić serwer o brakujące informacje.

+1

Interesujący pomysł, podoba mi się ten drugi, chociaż byłoby miło, gdyby SignalR opakował dla nas tę funkcjonalność ... może w późniejszej wersji chyba! – reach4thelasers

+1

Rozumiem, czego chcesz, ale idea przesyłania wiadomości to ogień i zapomnij. Więc nie widzę tego jako istotnego elementu sygnałuR. Zgadzam się z obejściem @MikeC sugeruje jako dobrą opcję tho. –

+0

Czy mamy jakąś opcję lub funkcję do włączania i wyłączania, jak "Losowe upuszczanie wiadomości" w SignalR? – Kurkula

Powiązane problemy