SignalR
SignalR — это открытая библиотека для платформы ASP.NET Core, предназначенная для добавления функциональности «реального времени» в веб-приложения. Она позволяет серверу мгновенно «проталкивать» (push) данные подключённым клиентам и обеспечивает двустороннюю коммуникацию между браузером, мобильным или настольным приложением и сервером[1].
Общие сведения
| SignalR | |
|---|---|
| англ. SignalR | |
| Область использования | Веб-разработка, ASP.NET Core |
| Автор понятия | Microsoft |
Определение
SignalR реализует логическое постоянное соединение между клиентом и сервером, автоматически выбирая оптимальный транспортный протокол (WebSockets, Server-Sent Events или Long Polling) и управляя событиями подключения, переподключения и отключения[2].
Ключевые возможности библиотеки:
- Двунаправленная передача сообщений «сервер ↔ клиент» в реальном времени
- Вызовы удалённых процедур (RPC) между JavaScript-кодом клиента и серверным кодом .NET
- Групповая рассылка и адресная доставка сообщений отдельным клиентам или группам
- Масштабирование на несколько серверов с помощью backplane (Redis, SQL Server, Azure SignalR Service)[3]
- Интеграция со встроенными механизмами аутентификации и DI-контейнером ASP.NET Core
Структурные элементы SignalR
- Hubs (хабы) — высокоуровневый канал, через который клиенты и сервер вызывают методы друг друга. Хаб автоматически сериализует параметры (JSON или MessagePack) и маршрутизирует сообщения адресатам[4]
- PersistentConnection — низкоуровневый API, предоставляющий полный контроль над форматом и обработкой сообщений. На основе этого класса реализованы хабы[5]
- Транспортные механизмы
- WebSockets — предпочтительный полно-дуплексный транспорт с наименьшей задержкой
- Server-Sent Events — односторонняя передача данных от сервера к клиенту
- Long Polling — механизм резервного опроса, совместимый с устаревшими браузерами[6]
- Backplane — внешняя шина сообщений (Redis, Azure SignalR Service и др.), синхронизирующая публикацию сообщений между экземплярами приложения при горизонтальном масштабировании[7]
Этапы работы
Работа SignalR включает несколько последовательных этапов, обеспечивающих установление и поддержание соединения, обмен сообщениями и завершение сессии.
Клиент посылает запрос на эндпоинт «/negotiate», чтобы получить список поддерживаемых транспортных протоколов и, при необходимости, токен доступа (например, для Azure SignalR Service).
Инициируется выбранный транспорт (WebSockets, Server-Sent Events или Long Polling). Сервер подтверждает запуск соединения и присваивает клиенту уникальный идентификатор[8].
Клиент может вызывать серверные методы (например, InvokeAsync), а сервер — клиентские (например, SendAsync). Все передаваемые данные сериализуются в формат JSON или MessagePack[9].
Сервер может отправлять сообщения:
- всем подключённым клиентам
- определённой группе клиентов
- конкретному пользователю[10]
Для обнаружения обрыва канала используются периодические ping-сообщения (по умолчанию каждые 15 секунд). Тайм-аут ожидания ответа со стороны сервера составляет 30 секунд[11].
Соединение может завершиться явно (метод Stop()) или по истечении тайм-аута. На сервере событие OnDisconnected сигнализирует о завершении сессии[12].
Преимущества и недостатки
- Высокоуровневый API, скрывающий детали WebSockets и других транспортов[13]
- Автоматический выбор транспорта и поддержка переподключения
- Масштабирование через Redis или Azure SignalR Service без sticky-sessions[14]
- Кроссплатформенные клиенты (.NET, JavaScript, Java)
- Полная интеграция с экосистемой ASP.NET Core
- Поддержание тысяч постоянных соединений требует дополнительных ресурсов сервера[15]
- При откате на Long Polling увеличивается задержка
- Жёсткая зависимость от платформы .NET — для иных стеков могут понадобиться альтернативы
- Масштабирование без backplane затруднительно
- Ограниченная поддержка офлайн-режима и возможные сетевые блокировки WebSockets
Сферы применения
- Чат-сервисы и мессенджеры
- Совместное редактирование документов и онлайн-доски
- Панели мониторинга (биржевые котировки, IoT-метрики)
- Многопользовательские игры и викторины в реальном времени
- Системы уведомлений и push-оповещений
- Онлайн-аукционы и платформы голосований[16]
Инструменты для использования в SignalR
- NuGet-пакеты
- Сервер: входит в состав ASP.NET Core
- Клиент .NET: [Microsoft.AspNetCore.SignalR.Client](https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client)
- JavaScript / TypeScript SDK — npm-пакет [@microsoft/signalr](https://www.npmjs.com/package/@microsoft/signalr)
- Azure SignalR Service — управляемый облачный backplane, автоматически масштабирующий соединения и сообщения[17]
- Redis backplane — пакет [Microsoft.AspNetCore.SignalR.StackExchangeRedis](https://codeopinion.com/practical-asp-net-core-signalr-scaling/) для вертикального и горизонтального масштабирования on-prem приложений.
- Средства диагностики
Примечания
- ↑ Overview of ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — Introduction to SignalR. Дата обращения: 20 июня 2025.
- ↑ ASP.NET Core, an open-source web development framework — .NET. ASP.NET — SignalR. Дата обращения: 20 июня 2025.
- ↑ What is SignalR Backplane for ASP.NET Core?- NCache. Alachisoft — SignalR Backplane. Дата обращения: 20 июня 2025.
- ↑ Building Real-Time Applications with SignalR and ASP.NET Core. QServices IT — Building real-time applications with SignalR. Дата обращения: 20 июня 2025.
- ↑ ASP.NET SignalR Basis Step by Step (Part 1) - CodeProject. CodeProject — ASP.NET SignalR Basis. Дата обращения: 20 июня 2025.
- ↑ What is SignalR library for real-time connectivity? PubNub — SignalR guides. Дата обращения: 20 июня 2025.
- ↑ Introduction to Scaleout in SignalR — Microsoft Learn. Microsoft Learn — Scale-out in SignalR. Дата обращения: 20 июня 2025.
- ↑ SignalR on the Wire – an informal description of the SignalR protocol – Code, the Universe and Everything… 3D-Logic — SignalR on the wire. Дата обращения: 20 июня 2025.
- ↑ Using SignalR. csharp-networking — Hub invocations. Дата обращения: 20 июня 2025.
- ↑ What is SignalR library for real-time connectivity? PubNub — SignalR guides. Дата обращения: 20 июня 2025.
- ↑ The Tech Platform — Connection management in SignalR. The Tech Platform — Connection management in SignalR. Дата обращения: 20 июня 2025.
- ↑ Understanding and Handling Connection Lifetime Events in SignalR — Microsoft Learn. Microsoft Learn — Handling connection lifetime events. Дата обращения: 20 июня 2025.
- ↑ A Guide to Building Real-Time Web Apps with ASP.NET Core SignalR. Spec-INDIA — Real-time web applications with SignalR. Дата обращения: 20 июня 2025.
- ↑ ASP.NET Core SignalR production hosting and scaling — Microsoft Learn. Microsoft Learn — SignalR scale-out. Дата обращения: 20 июня 2025.
- ↑ SignalR Explained: How SignalR works, limitations & use cases. Ably — SignalR deep dive. Дата обращения: 20 июня 2025.
- ↑ Общие сведения о ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — Introduction to SignalR. Дата обращения: 20 июня 2025.
- ↑ What is Azure SignalR Service? — Microsoft Learn. Azure — SignalR Service overview. Дата обращения: 20 июня 2025.
- ↑ Logging and diagnostics in ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — SignalR diagnostics. Дата обращения: 20 июня 2025.
- ↑ GitHub - gourav-d/SignalR-Web-Client: ASP.Net Core SignalR Web Client. GitHub — SignalR Web Client. Дата обращения: 20 июня 2025.
| Правообладателем данного материала является АНО «Интернет-энциклопедия «РУВИКИ». Использование данного материала на других сайтах возможно только с согласия АНО «Интернет-энциклопедия «РУВИКИ». |