Czy ktoś może dać mi znać, jak sygnalizujący działa wewnętrznie na wysokim poziomie?
Domyślam się, że opróżnia dane, Response.Flush
a po stronie klienta wysyła żądania Ajax w określonych odstępach czasu. Czy to jest poprawne?
Czy ktoś może dać mi znać, jak sygnalizujący działa wewnętrznie na wysokim poziomie?
Domyślam się, że opróżnia dane, Response.Flush
a po stronie klienta wysyła żądania Ajax w określonych odstępach czasu. Czy to jest poprawne?
Odpowiedzi:
Nie, sygnalizujący to abstrakcja w połączeniu. Zapewnia dwa modele programowania dla tego połączenia (koncentratory i połączenia trwałe). SignalR ma koncepcję transportów, każdy transport decyduje o sposobie wysyłania / odbierania danych oraz w jaki sposób łączy się i rozłącza.
SignalR ma kilka wbudowanych transportów:
SignalR próbuje wybrać „najlepsze” połączenie obsługiwane przez serwer i klienta (można również wymusić użycie określonego transportu).
To jest wysoki poziom. Jeśli chcesz zobaczyć, jak zaimplementowano każdy transport, możesz spojrzeć na kod źródłowy .
Istnieje również kod klienta dla każdego transportu: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Jeśli zastanawiasz się, jak działa w szczególności transport z długimi ankietami:
Wysyła żądanie AJAX do serwera, który oczekuje asynchronicznie na odpowiedź sygnału. Gdy pojawi się sygnał lub żądanie przekroczy limit czasu, wraca z serwera i wysyła kolejne żądanie, a proces jest kontynuowany. (Zostawiłem kilka szczegółów na temat tego, jak klient śledzi to, co widział, aby nie przegapić wiadomości)
Mam nadzieję, że to odpowiada na większość Twoich pytań.
@davidfowl odpowiedział już na większą część. Jednakże, aby podać więcej szczegółów dotyczących różnic w zachowaniu transportów, w szczególności między WebSocket i innymi transportami; poniżej znajduje się kilka punktów.