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