ASP.NET SignalR er et bibliotek for ASP.NET utviklere som forenkler prosessen med å legge til sanntids webfunksjonalitet i applikasjonene sine. En sanntids webfunksjon er en funksjon der serverkode kan sende innhold til en tilkoblet klient så snart det blir tilgjengelig, i stedet for at serveren skal vente på at klienten skal be om ny data.
ASP .NET SignalR er et klassebibliotek under ASP .NET, som kan realisere sanntidskommunikasjon i ASP .NET-webprosjekter (det vil si at klienten (nettsiden) og serversiden kan varsle hverandre i sanntid og kallemetoder). SignalR har tre overføringsmoduser: LongLooping (lang polling), WebSocket (HTML5 WEB-socket), Forever Frame ( lange forespørselsforbindelser som skjuler rammen), kan eksplisitt spesifiseres i WEB-klienten eller som standard (anbefalt), hvis standarden er tatt i bruk,SignalR vil automatisk velge riktig overføringsmetode basert på nettleserens miljø。
Fordi datainnlastingen på nettsiden er for treg, er grunnen at datapakken er for stor, og nettverksforespørselen er egnet, og det viser seg at "ws" er tom, og så oppdages det at SignalR ikke bruker websocket-protokollen.
Da jeg feilsøkte lokalt, fant jeg ut at nettstedet kan bruke WS-protokollen normalt, det vil si at det kan kommunisere normalt med websockets, og deretter observere forskjellen mellom server- og lokale nettverksforespørsler, og fant ut at det er som følger:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Lokalt:
{"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} Servere:
{"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} Noen parametere er opprinnelig forskjellige fra de lokale og servermessige, og jeg fant detTryWebSocketsparameter, lokal er sann, server er falsk.
Når man ser på informasjonen, finner man at hvis SignalR bruker WebSocket-protokollen, må følgende betingelser være oppfylt:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 eller Windows 8)
- WebSockets-funksjonen er aktivert på serveren
- Støtte for nettleser WebSockets
Dette er, jeg fant ut at IIS-versjonen på serveren er 7.5,WebSocket-protokollen støttes ikke i IIS 7.5。
Referanselenker:Innloggingen med hyperkoblingen er synlig.
|