Ответ
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-уведомления, обновление дашбордов, онлайн-игры.