Как SignalR работает внутри?


160

Кто-нибудь может дать мне знать, как SignalR работает внутри компании на высоком уровне?

Я предполагаю, что он сбрасывает данные, используя Response.Flushи на стороне клиента он отправляет запросы Ajax через определенные промежутки времени. Это правильно?


13
@dfowler сделал интервью со Скоттом Hansleman в последнее время, который был очень информативным hanselminutes.com/291/... .
выровнен

1
Хорошая статья об архитектуре сигнала r и о том, как она работает lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Махеш

Я знаю это давно, но microsoftvirtualacademy.com/Content/…
lordkain

1
Также смотрите эту презентацию на NDC 2013 от Дэвида Фаулера и Дамиана Эдвардса под названием «Под прикрытием с ASP.NET SignalR», где они создают облегченную версию SignalR вживую на сцене. Это очень информативно. Это до 2.0, но это не должно иметь большого значения. vimeo.com/68383353
Johan B

Ответы:


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 подключений в памяти.
Танигаинатан

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

любой ответ на этот вопрос stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl, пожалуйста, дайте ответ для этого stackoverflow.com/questions/47504489/…
Хитеш Тхакор

5

@davidfowl уже ответил на основную часть. Тем не менее, чтобы предоставить более подробную информацию о разнице в поведении транспортов, особенно между WebSocket и другими транспортами; ниже приведены некоторые моменты.

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