ASP.NET SignalR es una biblioteca para desarrolladores de ASP.NET que simplifica el proceso de añadir funcionalidad web en tiempo real a sus aplicaciones. Una función web en tiempo real es una función en la que el código del servidor puede enviar contenido a un cliente conectado tan pronto como esté disponible, en lugar de que el servidor espere a que el cliente solicite nuevos datos.
ASP .NET SignalR es una biblioteca de clases bajo ASP .NET, que puede realizar comunicación en tiempo real en proyectos web ASP .NET (es decir, el cliente (página web) y el lado del servidor pueden notificarse mutuamente en tiempo real y llamar a métodos). SignalR tiene tres modos de transmisión: LongLooping (sondeo largo), WebSocket (socket HTML5 WEB), Forever Frame ( conexiones de petición larga que ocultan el marco), pueden especificarse explícitamente en el cliente WEB o por defecto (recomendado), si se adopta el valor predeterminado,SignalR seleccionará automáticamente el método de transmisión adecuado según el entorno del navegador。
Como la carga de datos del sitio web es demasiado lenta, la razón es que el paquete de datos es demasiado grande, la solicitud de red es adecuada, y se detecta que "ws" está vacío, y luego se descubre que SignalR no utiliza el protocolo websocket.
Cuando depuré localmente, descubrí que la web puede usar el protocolo WS normalmente, es decir, puede comunicarse normalmente con websockets, y luego observar la diferencia entre las solicitudes de servidor y las de red local, y descubrí que es la siguiente:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclerouter%22%7D%5D&_=1555578162378
Local:
{"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} Servidores:
{"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} Algunos parámetros son originalmente diferentes de los locales y del servidor, y lo encontréTryWebSocketsparámetro, local es verdadero, servidor es falso.
Al observar la información, se observa que si SignalR utiliza el protocolo WebSocket, deben cumplirse las siguientes condiciones:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 o Windows 8)
- La función WebSockets está habilitada en el servidor
- Soporte para WebSockets de navegador
Es decir, he visto que la versión IIS en el servidor es la 7.5,El protocolo WebSocket no es compatible en IIS 7.5。
Enlaces de referencia:El inicio de sesión del hipervínculo es visible.
|