Як SignalR працює внутрішньо?


160

Чи може хто-небудь повідомити мені про те, як SignalR працює на високому рівні?

Я здогадуюсь, що це очищення даних за допомогою Response.Flushклієнта, а на клієнтській стороні він надсилає запити Ajax через певні проміжки часу. Це правильно?


13
Нещодавно @dfowler зробив інтерв'ю зі Скоттом Ганслеманом, яке було дуже інформативним hanselminutes.com/291/… .
Вирівняно

1
Хороша стаття про архітектуру сигналу і про те, як він працює lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh

Я знаю його давно, але microsoftvirtualacademy.com/Content/…
lordkain

1
Також дивіться цю презентацію на NDC 2013 від Девіда Фаулера та Даміана Едвардса під назвою "Під обкладинками з ASP.NET SignalR", де вони створюють легку версію SignalR в прямому ефірі. Це дуже інформативно. Це попередньо 2.0, але це не повинно мати великого значення. vimeo.com/68383353
Йохан Б

Відповіді:


241

Ні, SignalR - це абстракція над з'єднанням. Він дає вам дві моделі програмування через це з'єднання (концентратори та постійні з'єднання). SignalR має концепцію транспорту, кожен транспорт вирішує, як дані надсилаються / приймаються та як вони з'єднуються та відключаються.

SignalR має кілька вбудованих транспортних засобів:

  1. WebSockets
  2. Сервер надсилає події
  3. Назавжди кадр
  4. Довгі опитування

SignalR намагається вибрати "найкраще" з'єднання, що підтримується сервером і клієнтом (ви також можете змусити його використовувати певний транспорт).

Це високий рівень. Якщо ви хочете побачити, як реалізується кожен транспорт, ви можете подивитися вихідний код .

Також є код клієнта для кожного транспорту: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Якщо ви запитуєте, як працює довгий транспорт для голосування:

Він надсилає запит ajax на сервер, який асинхронно чекає сигналу на відповідь. Коли сигнал або час запиту вичерпується, він повертається з сервера і надсилає ще один запит, і процес триває. (Я залишив деякі подробиці про те, як клієнт відслідковує побачене, щоб він не пропускав повідомлення)

Сподіваємось, це відповідає на більшість ваших питань.


3
ви можете сказати мені, скільки з'єднань він може підтримувати за один раз?
Фархад-Таран

1
Що стосується того, скільки з'єднань буде підтримувати Signalr, залежить від межі запиту IIS. Його можна збільшити за допомогою конфігураційних записів або скриптів оболонки. Зазвичай Signalr зберігає в пам'яті 1000 з'єднань.
Thanigainathan

1
Як вже було сказано, лімітний ралі знаходиться на рівні сервера. Дамніен Едвардс (співавтор SignalR) отримав 150 000 з'єднань від одного 10 Гб сервера, хоча: twitter.com/DamianEdwards/status/486642486350061568
LDJ

будь-яка відповідь на це питання stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl прохання дати відповідь на цей stackoverflow.com/questions/47504489 / ...
Hitesh Thakor

5

@davidfowl вже відповів на основну частину. Однак, щоб надати ще детальну інформацію про різницю в поведінці транспорту, зокрема між WebSocket та іншими транспортами; нижче - деякі моменти.

  • WebSocket - єдиний транспорт, який встановлює справжній стійкий, двосторонній зв'язок між клієнтом і сервером. Однак WebSocket підтримується лише IIS 8 або вище, а також останні версії Internet Explorer, Google Chrome та Mozilla Firefox.
  • Незважаючи на те, що сервер надіслав події, Forever Frame та Long опитування, усі три користуються односторонньою комунікацією та підтримуються більшістю браузерів.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.