ASP.NET SignalR — це бібліотека для ASP.NET розробників, яка спрощує процес додавання веб-функціональності в реальному часі до їхніх додатків. Веб-функція в реальному часі — це функція, при якій серверний код може надсилати контент підключеному клієнту одразу після його доступності, замість того, щоб сервер чекав, поки клієнт запитає нові дані.
ASP .NET SignalR — це бібліотека класів під ASP .NET, яка може реалізувати комунікацію в реальному часі у веб-проєктах ASP .NET (тобто клієнт (веб-сторінка) і серверна сторона можуть повідомляти одне одного в режимі реального часу та методах виклику), SignalR має три режими передачі: LongLooping (довге опитування), WebSocket (HTML5 WEB socket), Forever Frame ( довгі з'єднання з запитом, які приховують кадр), можуть бути явно вказані у WEB-клієнті або за замовчуванням (рекомендовано), якщо прийнято стандартний варіант,SignalR автоматично вибере відповідний спосіб передачі залежно від середовища браузера。
Оскільки завантаження даних на сайті надто повільно, причина в тому, що пакет даних занадто великий, а мережевий запит підходить, виявляється, що "ws" порожній, а потім виявляється, що SignalR не використовує протокол websocket.
Коли я налагоджував локально, я виявив, що сайт може нормально використовувати протокол WS, тобто нормально спілкуватися з вебсокетами, а потім спостерігати різницю між серверними та локальними мережевими запитами, і виявив, що це так:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Місцеві:
{"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} Сервери:
{"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} Деякі параметри спочатку відрізняються від локальних і серверних, і я це знайшовTryWebSocketsпараметр, локальний — істинний, сервер — хибний.
Аналізуючи інформацію, виявляється, що якщо SignalR використовує протокол WebSocket, необхідно виконати такі умови:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 або Windows 8)
- Функція WebSockets увімкнена на сервері
- Підтримка браузерних WebSockets
Я виявив, що версія IIS на сервері — 7.5,Протокол WebSocket не підтримується в IIS 7.5。
Посилання на посилання:Вхід за гіперпосиланням видно.
|