Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 30231|Відповідь: 1

[Джерело] SignalR не використовує протокол websocket для спілкування

[Копіювати посилання]
Опубліковано 18.04.2019 17:33:48 | | | |
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



Посилання на посилання:Вхід за гіперпосиланням видно.




Попередній:WPF Programmer Rest Digital Clock [з вихідним кодом]
Наступний:«Божевільний програміст»
Опубліковано 22.04.2019 09:24:01 |
Гарних справ, Марк
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com