ASP.NET SignalR to biblioteka dla ASP.NET programistów, która upraszcza proces dodawania funkcjonalności webowej w czasie rzeczywistym do ich aplikacji. Funkcja webowa w czasie rzeczywistym to taka, w której kod serwera może przesyłać zawartość do podłączonego klienta zaraz po jej udostępnieniu, zamiast czekać na żądanie nowych danych przez klienta.
ASP .NET SignalR to biblioteka klas pod ASP .NET, która umożliwia komunikację w czasie rzeczywistym w projektach internetowych ASP .NET (czyli klient (strona internetowa) i strona serwera mogą powiadamiać się nawzajem w czasie rzeczywistym i wywołać metodami). SignalR posiada trzy tryby transmisji: LongLooping (długie polling), WebSocket (gniazdo HTML5 WEB), Forever Frame ( długie połączenia żądań, które ukrywają ramkę), mogą być wyraźnie określone w kliencie WEB lub domyślnie (zalecane), jeśli domyślne jest przyjęte,SignalR automatycznie wybierze odpowiednią metodę transmisji w zależności od środowiska przeglądarki。
Ponieważ ładowanie danych na stronie internetowej jest zbyt wolne, powodem jest to, że pakiet danych jest zbyt duży, a żądanie sieciowe jest odpowiednie, okazuje się, że "ws" jest puste, a następnie okazuje się, że SignalR nie korzysta z protokołu websocket.
Gdy debugowałem lokalnie, okazało się, że strona internetowa może normalnie korzystać z protokołu WS, czyli komunikować się normalnie za pomocą websocketów, a następnie obserwować różnicę między żądaniami serwera a sieci lokalnej i stwierdziłem, że wygląda to następująco:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Lokalnie:
{"URL":"/signalr","ConnectionToken":"iX0gmz3XDJpQ62b6eiWK16Quaf+LFlD5aHw1k2oC6dKPz7naDuFmc0M7+xiR72ZjJDuNnMvfZyZF72qJK/4g6FOKAsY5C0uCfViOBXPRJVMBczOXTyCKcztIcugmcBq8" ,"ConnectionId":"50598ad3-b138-458c-a58d-b4f84d23c0e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} Serwery:
{"Url":"/signalr","ConnectionToken":"4JbNUOp5/ju8Fljn29tCsFoTitZXk3XfF3tkuc/OYpaEQPawJHi3U1nTtjcJJzK4mVsOn9nAEECZj7h5732aV7tNJDgsasCon9uQwhqXZC5EAZPrAgASueApAjBCpPpE" ,"ConnectionId":"c46e67b1-4fb4-4345-983f-bf2c391d33e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":false," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} Niektóre parametry są pierwotnie inne niż lokalne i serwerowe, i znalazłem toTryWebSocketsparametr, lokalny jest prawdziwy, serwer fałszywy.
Analizując informacje, okazuje się, że jeśli SignalR korzysta z protokołu WebSocket, muszą być spełnione następujące warunki:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 lub Windows 8)
- Funkcja WebSockets jest włączona na serwerze
- Obsługa WebSockets w przeglądarce
To znaczy, odkryłem, że wersja IIS na serwerze to 7.5,Protokół WebSocket nie jest obsługiwany w IIS 7.5。
Linki referencyjne:Logowanie do linku jest widoczne.
|