Как SignalR работает внутри? - PullRequest
154 голосов
/ 18 октября 2011

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

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

Ответы [ 2 ]

232 голосов
/ 24 октября 2011

Нет, SignalR - это абстракция над соединением. Это дает вам две модели программирования через это соединение (концентраторы и постоянные соединения). SignalR имеет концепцию транспортов, каждый транспорт решает, как данные отправляются / принимаются и как они подключаются и отключаются.

SignalR имеет несколько встроенных транспортов:

  1. WebSockets
  2. События, отправленные сервером
  3. Навсегда Рамка
  4. Длинный опрос

SignalR пытается выбрать «лучшее» соединение, поддерживаемое сервером и клиентом (вы также можете заставить его использовать определенный транспорт).

Это высокий уровень. Если вы хотите увидеть, как реализован каждый транспорт, вы можете посмотреть исходный код .

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

Если вы спрашиваете о том, как, в частности, работает транспорт для длинных опросов:

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

Надеюсь, это ответит на большинство ваших вопросов.

2 голосов
/ 04 апреля 2017

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

  • WebSocket - единственный транспорт, который устанавливает истинно постоянное двустороннее соединение между клиентом и сервером.Однако WebSocket поддерживается только IIS 8 или более поздней версией, а последние версии Internet Explorer, Google Chrome и Mozilla Firefox.
  • Пока сервер отправляет события, навсегда фрейм и длинный опрос, все три следуют в одну сторонусвязи и поддерживаются большинством браузеров.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...