SignalR

SignalR — это открытая библиотека для платформы ASP.NET Core, предназначенная для добавления функциональности «реального времени» в веб-приложения. Она позволяет серверу мгновенно «проталкивать» (push) данные подключённым клиентам и обеспечивает двустороннюю коммуникацию между браузером, мобильным или настольным приложением и сервером[1].

Общие сведения
SignalR
англ. SignalR
Область использования Веб-разработка, ASP.NET Core
Автор понятия Microsoft

Определение

SignalR реализует логическое постоянное соединение между клиентом и сервером, автоматически выбирая оптимальный транспортный протокол (WebSockets, Server-Sent Events или Long Polling) и управляя событиями подключения, переподключения и отключения[2].

Ключевые возможности библиотеки:

  1. Двунаправленная передача сообщений «сервер ↔ клиент» в реальном времени
  2. Вызовы удалённых процедур (RPC) между JavaScript-кодом клиента и серверным кодом .NET
  3. Групповая рассылка и адресная доставка сообщений отдельным клиентам или группам
  4. Масштабирование на несколько серверов с помощью backplane (Redis, SQL Server, Azure SignalR Service)[3]
  5. Интеграция со встроенными механизмами аутентификации и 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 включает несколько последовательных этапов, обеспечивающих установление и поддержание соединения, обмен сообщениями и завершение сессии.

1. Negotiate

Клиент посылает запрос на эндпоинт «/negotiate», чтобы получить список поддерживаемых транспортных протоколов и, при необходимости, токен доступа (например, для Azure SignalR Service).

2. Установление соединения

Инициируется выбранный транспорт (WebSockets, Server-Sent Events или Long Polling). Сервер подтверждает запуск соединения и присваивает клиенту уникальный идентификатор[8].

3. Вызовы хаба

Клиент может вызывать серверные методы (например, InvokeAsync), а сервер — клиентские (например, SendAsync). Все передаваемые данные сериализуются в формат JSON или MessagePack[9].

4. Передача сообщений

Сервер может отправлять сообщения:

  • всем подключённым клиентам
  • определённой группе клиентов
  • конкретному пользователю[10]

5. Keep-Alive

Для обнаружения обрыва канала используются периодические ping-сообщения (по умолчанию каждые 15 секунд). Тайм-аут ожидания ответа со стороны сервера составляет 30 секунд[11].

6. Отключение

Соединение может завершиться явно (метод 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-пакеты
  • 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 приложений.
  • Средства диагностики
    • Логирование ASP.NET Core (категории Microsoft.AspNetCore.SignalR)
    • dotnet-counters и EventCounter для метрик
    • Распределённая трассировка через DiagnosticSource[18]
    • Сторонний «SignalR Web Client» для отладки хабов[19]

Примечания

  1. Overview of ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — Introduction to SignalR. Дата обращения: 20 июня 2025.
  2. ASP.NET Core, an open-source web development framework — .NET. ASP.NET — SignalR. Дата обращения: 20 июня 2025.
  3. What is SignalR Backplane for ASP.NET Core?- NCache. Alachisoft — SignalR Backplane. Дата обращения: 20 июня 2025.
  4. Building Real-Time Applications with SignalR and ASP.NET Core. QServices IT — Building real-time applications with SignalR. Дата обращения: 20 июня 2025.
  5. ASP.NET SignalR Basis Step by Step (Part 1) - CodeProject. CodeProject — ASP.NET SignalR Basis. Дата обращения: 20 июня 2025.
  6. What is SignalR library for real-time connectivity? PubNub — SignalR guides. Дата обращения: 20 июня 2025.
  7. Introduction to Scaleout in SignalR — Microsoft Learn. Microsoft Learn — Scale-out in SignalR. Дата обращения: 20 июня 2025.
  8. SignalR on the Wire – an informal description of the SignalR protocol – Code, the Universe and Everything… 3D-Logic — SignalR on the wire. Дата обращения: 20 июня 2025.
  9. Using SignalR. csharp-networking — Hub invocations. Дата обращения: 20 июня 2025.
  10. What is SignalR library for real-time connectivity? PubNub — SignalR guides. Дата обращения: 20 июня 2025.
  11. The Tech Platform — Connection management in SignalR. The Tech Platform — Connection management in SignalR. Дата обращения: 20 июня 2025.
  12. Understanding and Handling Connection Lifetime Events in SignalR — Microsoft Learn. Microsoft Learn — Handling connection lifetime events. Дата обращения: 20 июня 2025.
  13. A Guide to Building Real-Time Web Apps with ASP.NET Core SignalR. Spec-INDIA — Real-time web applications with SignalR. Дата обращения: 20 июня 2025.
  14. ASP.NET Core SignalR production hosting and scaling — Microsoft Learn. Microsoft Learn — SignalR scale-out. Дата обращения: 20 июня 2025.
  15. SignalR Explained: How SignalR works, limitations & use cases. Ably — SignalR deep dive. Дата обращения: 20 июня 2025.
  16. Общие сведения о ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — Introduction to SignalR. Дата обращения: 20 июня 2025.
  17. What is Azure SignalR Service? — Microsoft Learn. Azure — SignalR Service overview. Дата обращения: 20 июня 2025.
  18. Logging and diagnostics in ASP.NET Core SignalR — Microsoft Learn. Microsoft Learn — SignalR diagnostics. Дата обращения: 20 июня 2025.
  19. GitHub - gourav-d/SignalR-Web-Client: ASP.Net Core SignalR Web Client. GitHub — SignalR Web Client. Дата обращения: 20 июня 2025.

Категории

© Правообладателем данного материала является АНО «Интернет-энциклопедия «РУВИКИ».
Использование данного материала на других сайтах возможно только с согласия АНО «Интернет-энциклопедия «РУВИКИ».