Что такое ASP.Net Core SignalR?
Все приложения, подключенные к Интернету, состоят из серверов и клиентов. Клиенты используют серверы для данных, а основной механизм, с помощью которого они получают данные, — отправка запросов HTTP. Некоторым клиентским приложениям требуются данные, которые часто меняются.
ASP.NET Core SignalR предоставляет API для создания удаленных вызовов процедур (RPC) "сервер — клиент". RPC вызывает функции на клиентах из кода .NET Core на стороне сервера. Есть несколько поддерживаемых платформ, каждая из которых использует соответствующий пакет SDK клиента. Таким образом, язык программирования, вызываемый вызовами RPC, может отличаться.
Полезно ознакомиться с общей терминологией, связанной с SignalR. В этом уроке вы узнаете, какие компоненты SignalR требуются в серверном приложении, а не в клиентских приложениях. Кроме того, вы получите представление о различных механизмах дуплексной связи. SignalR инкапсулирует несколько протоколов в режиме реального времени и абстрагирует сложности каждой реализации. Дополнительные сведения см. в документации по ASP.NET Core SignalR.
Основные термины, связанные с SignalR, обсуждаются в следующих разделах.
Транспорты
SignalR поддерживает следующие методы (транспортные протоколы) для обработки обмена данными в реальном времени:
- WebSockets
- События, посылаемые сервером
- Длительный опрос
Порядок, в котором приведен список транспортных протоколов, означает порядок их корректного возврата. Иными словами, WebSockets предпочтительнее для событий, отправленных сервером, и события, отправленные сервером, предпочтительнее по сравнению с длинным опросом, хотя любой из этих транспортных средств можно использовать. SignalR автоматически выбирает лучший метод транспорта, который находится в пределах возможностей сервера и клиента. Дополнительные сведения см. в официальной спецификации транспортных протоколов SignalR.
Сервер
Сервер отвечает за предоставление конечной точки SignalR. Конечная точка сопоставляется с подклассом Hub или Hub<T>. Сервер может существовать локально, в поставщике облачных служб (например, Azure) или в службе Azure SignalR. Сервер предоставляет методы концентратора, которые могут вызываться из клиентов, и события, на которые клиенты могут подписываться. Они считаются удаленными процедурами.
Узел
В SignalR концентратор используется для обмена данными между клиентами и серверами. Концентратор — это высокоуровневый конвейер, который позволяет клиенту и серверу вызывать методы друг друга. С этой целью SignalR автоматически обрабатывает отправку за пределами компьютера. Можно считать, что концентратор является прокси-сервером, соединяющим все подключенные клиенты и сервер.
Протоколы
Протокол SignalR является протоколом для двустороннего вызова RPC через любой транспортный протокол на основе сообщений. Любая из сторон в подключении может вызывать процедуры для другой стороны, а процедуры могут возвращать ноль или более результатов или ошибку. SignalR предоставляет два встроенных протокола концентратора:
- Текстовый протокол на основе JSON, который является значением по умолчанию.
- Двоичный протокол на основе MessagePack, который обычно создает сообщения меньшего размера по сравнению с JSON.
Чтобы использовать протокол MessagePack, сервер и клиент должны участвовать в его настройке, и этот протокол должен поддерживаться и сервером, и клиентом. Существует третий протокол концентратора — BlazorPack, но он используется исключительно с приложениями Blazor-Server. Его нельзя использовать без модели размещения Blazor-Server. Дополнительные сведения см. в официальной спецификации транспортных протоколов SignalR.
Пользователи
Пользователь в системе выступает в качестве отдельного человека, но также может быть частью группы. Сообщения можно отправлять в группы, а все члены группы уведомляются. Один пользователь может подключаться из нескольких клиентских приложений. Например, один и тот же пользователь может использовать мобильное устройство и веб-браузер и одновременно получать обновления в реальном времени.
Группы
Группа состоит из одного или нескольких подключений. Сервер может создавать группы, добавлять подключения к группе и удалять подключения из группы. Группа имеет определенное имя, которое служит в качестве уникального идентификатора. Группы служат механизмом определения области для нацеливания сообщений. То есть функции в режиме реального времени могут отправляться только пользователям в именованной группе.
Связи
Подключение к концентратору представлено уникальным идентификатором, который известен только серверу и клиенту. Для каждого типа концентратора доступно одно подключение. Каждый клиент имеет уникальное подключение к серверу. Это значит, что один пользователь может быть представлен на нескольких клиентах, но каждое клиентское подключение имеет собственный идентификатор.
Клиенты
Клиент несет ответственность за установление соединения с конечной точкой сервера через объект HubConnection
. Подключение к концентратору представлено в каждой целевой платформе:
- Клиент .NET:
Microsoft.AspNetCore.SignalR.Client.HubConnection
- Клиент JavaScript:
@microsoft/signalr.HubConnection
- Клиент Java:
com.microsoft.signalr.HubConnection
Дополнительные сведения см. в документации по поддерживаемым платформам ASP.NET Core SignalR.
Если экземпляр подключения концентратора запущен успешно, сообщения передаются в обоих направлениях. Пользователи могут передавать уведомления на сервер, а также получать уведомления от сервера. Клиент — это любое подключенное приложение, например веб-браузер, мобильное приложение или классическое приложение, среди прочего.