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

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

Я предполагаю, что это очистка данных с помощью Response.Flush и на стороне клиента отправляет запросы ajax через определенные промежутки времени. Правильно ли это?

Ответ 1

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

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

  • WebSockets
  • События, отправленные сервером
  • Forever Frame
  • Длительный опрос

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

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

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

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

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

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

Ответ 2

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

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