ASP.NET SignalR é uma biblioteca para desenvolvedores ASP.NET que simplifica o processo de adicionar funcionalidade web em tempo real às suas aplicações. Um recurso web em tempo real é um recurso em que o código do servidor pode enviar conteúdo para um cliente conectado assim que ele fica disponível, em vez de fazer o servidor esperar o cliente solicitar novos dados.
ASP .NET SignalR é uma biblioteca de classes sob ASP .NET, que pode realizar comunicação em tempo real em projetos web ASP .NET (ou seja, o cliente (página web) e o lado do servidor podem se notificar mutuamente em tempo real e chamar métodos). SignalR possui três modos de transmissão: LongLooping (longa polling), WebSocket (HTML5 WEB socket), Forever Frame ( conexões de requisição longas que ocultam o quadro), podem ser explicitamente especificados no cliente WEB ou por padrão (recomendado), se o padrão for adotado,O SignalR selecionará automaticamente o método de transmissão apropriado com base no ambiente do navegador。
Como o carregamento dos dados do site é muito lento, a razão é que o pacote de dados é muito grande, a requisição de rede é adequada, e descobre-se que o "ws" está vazio, e então verifica-se que o SignalR não usa o protocolo websocket.
Quando depurei localmente, descobri que o site pode usar o protocolo WS normalmente, ou seja, pode se comunicar normalmente com websockets, e então observar a diferença entre requisições de servidor e rede local, e descobri que é a seguinte:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclevehiclehub%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} Alguns parâmetros são originalmente diferentes dos locais e do servidor, e eu encontrei issoTryWebSocketsparâmetro, local é verdadeiro, servidor é falso.
Analisando as informações, constata-se que, se o SignalR usar o protocolo WebSocket, as seguintes condições precisam ser atendidas:
- ASP.NET 4,5
- IIS 8.0 (Windows Server 2012 ou Windows 8)
- O recurso WebSockets é ativado no servidor
- Suporte para WebSockets de navegador
Descobri que a versão IIS no servidor é 7.5,O protocolo WebSocket não é suportado no IIS 7.5。
Links de referência:O login do hiperlink está visível.
|