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