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.Flusha 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.Flusha 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.