Чи може хто-небудь повідомити мені про те, як SignalR працює на високому рівні?
Я здогадуюсь, що це очищення даних за допомогою Response.Flush
клієнта, а на клієнтській стороні він надсилає запити Ajax через певні проміжки часу. Це правильно?
Чи може хто-небудь повідомити мені про те, як SignalR працює на високому рівні?
Я здогадуюсь, що це очищення даних за допомогою Response.Flush
клієнта, а на клієнтській стороні він надсилає запити Ajax через певні проміжки часу. Це правильно?
Відповіді:
Ні, SignalR - це абстракція над з'єднанням. Він дає вам дві моделі програмування через це з'єднання (концентратори та постійні з'єднання). SignalR має концепцію транспорту, кожен транспорт вирішує, як дані надсилаються / приймаються та як вони з'єднуються та відключаються.
SignalR має кілька вбудованих транспортних засобів:
SignalR намагається вибрати "найкраще" з'єднання, що підтримується сервером і клієнтом (ви також можете змусити його використовувати певний транспорт).
Це високий рівень. Якщо ви хочете побачити, як реалізується кожен транспорт, ви можете подивитися вихідний код .
Також є код клієнта для кожного транспорту: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Якщо ви запитуєте, як працює довгий транспорт для голосування:
Він надсилає запит ajax на сервер, який асинхронно чекає сигналу на відповідь. Коли сигнал або час запиту вичерпується, він повертається з сервера і надсилає ще один запит, і процес триває. (Я залишив деякі подробиці про те, як клієнт відслідковує побачене, щоб він не пропускав повідомлення)
Сподіваємось, це відповідає на більшість ваших питань.
@davidfowl вже відповів на основну частину. Однак, щоб надати ще детальну інформацію про різницю в поведінці транспорту, зокрема між WebSocket та іншими транспортами; нижче - деякі моменти.