Что такое SignalR в ASP.NET Core?

«Что такое SignalR в ASP.NET Core?» — вопрос из категории ASP.NET Core, который задают на 28% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SignalR — это библиотека для ASP.NET Core, которая абстрагирует сложность реализации двусторонней связи в реальном времени (real-time) между сервером и клиентами.

Ключевые особенности:

  • Автоматический выбор транспорта: SignalR на стороне клиента и сервера согласует наилучший доступный протокол: WebSockets, Server-Sent Events (SSE) или Long Polling. Разработчик пишет один API, а библиотека сама управляет транспортом.
  • Модель Hub: Основная абстракция для обмена сообщениями. Сервер определяет методы, которые могут вызывать клиенты, а клиенты — методы, которые может вызывать сервер.
  • Управление соединениями: Встроенная поддержка групп соединений, отправки сообщений конкретным клиентам или всем подключённым.

Пример серверного Hub:

public class ChatHub : Hub
{
    // Клиент вызывает этот метод
    public async Task SendMessage(string user, string message)
    {
        // Сервер рассылает сообщение ВСЕМ подключённым клиентам
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }

    // Можно отправлять сообщения конкретному соединению или группе
    public async Task SendPrivateMessage(string connectionId, string message)
    {
        await Clients.Client(connectionId).SendAsync("PrivateMessage", message);
    }
}

Пример клиента на JavaScript:

// Установка соединения
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .build();

// Подписка на метод, который будет вызывать сервер
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

// Запуск соединения и вызов серверного метода
await connection.start();
await connection.invoke("SendMessage", "Alice", "Hello World!");

Типичные сценарии: чаты, live-уведомления, обновление дашбордов, онлайн-игры.