ASP.NET SignalR è una libreria per sviluppatori ASP.NET che semplifica il processo di aggiunta di funzionalità web in tempo reale alle loro applicazioni. Una funzione web in tempo reale è una funzione in cui il codice server può inviare contenuti a un client connesso non appena diventano disponibili, invece di far aspettare al server che il client richieda nuovi dati.
ASP .NET SignalR è una libreria di classi sotto ASP .NET, che può realizzare comunicazioni in tempo reale nei progetti web ASP .NET (cioè, il client (pagina web) e il lato server possono notificarsi a vicenda in tempo reale e chiamare metodi), SignalR ha tre modalità di trasmissione: LongLooping (long polling), WebSocket (socket HTML5 WEB), Forever Frame ( lunghe connessioni di richiesta che nascondono il frame), può essere esplicitamente specificato nel client WEB o di default (consigliato), se il predefinito viene adottato,SignalR selezionerà automaticamente il metodo di trasmissione appropriato in base all'ambiente del browser。
Poiché il caricamento dei dati del sito web è troppo lento, la ragione è che il pacchetto dati è troppo grande, la richiesta di rete è adeguata, si scopre che "ws" è vuoto, e poi si scopre che SignalR non utilizza il protocollo websocket.
Quando ho fatto il debug locale, ho scoperto che il sito web può usare normalmente il protocollo WS, cioè può comunicare normalmente con i websocket, e poi osservare la differenza tra richieste server e rete locale, e ho scoperto che è la seguente:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclevehiclehub%22%7D%5D&_=1555578162378
Locali:
{"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} Server:
{"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} Alcuni parametri sono originariamente diversi da quelli locali e server, e l'ho trovatoTryWebSocketsparametro, locale è vero, server è falso.
Esaminando le informazioni, si scopre che se SignalR utilizza il protocollo WebSocket, devono essere soddisfatte le seguenti condizioni:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 o Windows 8)
- La funzione WebSockets è abilitata sul server
- Supporto per browser WebSocket
Cioè, ho scoperto che la versione IIS sul server è la 7.5,Il protocollo WebSocket non è supportato in IIS 7.5。
Collegamenti di riferimento:Il login del link ipertestuale è visibile.
|