SignalR — это библиотека для ASP.NET Core, позволяющая в реальном времени обмениваться данными между клиентами и сервером. Используется для создания чатов, уведомлений, мониторинга данных и других интерактивных приложений.
Основные возможности
- Поддержка WebSockets, Server-Sent Events и Long Polling
- Автоматическое переключение транспорта в зависимости от возможностей клиента
- Поддержка масштабирования через Redis, Azure SignalR Service
- Возможность работы с различными клиентами: JavaScript, .NET, Java, Python
Установка SignalR
SignalR добавляется в проект ASP.NET Core через пакет NuGet Microsoft.AspNetCore.SignalR
.
Install-Package Microsoft.AspNetCore.SignalR
Создание хаба
Хаб управляет подключениями и взаимодействием между клиентами.
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Настройка сервера
Добавление SignalR в Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalR();
var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
});
app.Run();
Подключение клиента JavaScript
Клиентское приложение подключается к хабу через SignalR JavaScript SDK.
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.5/signalr.min.js"></script>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chatHub")
.build();
connection.on("ReceiveMessage", (user, message) => {
console.log(`${user}: ${message}`);
});
connection.start().catch(err => console.error(err));
</script>
Вызов методов сервера с клиента
Отправка сообщения с клиента на сервер:
connection.invoke("SendMessage", "User1", "Hello, SignalR!")
.catch(err => console.error(err));
Масштабирование SignalR
Для работы в нескольких узлах используется Redis.
builder.Services.AddSignalR().AddStackExchangeRedis("localhost:6379");
Авторизация в SignalR
SignalR поддерживает аутентификацию и авторизацию через Authorize
.
[Authorize]
public class ChatHub : Hub
{
}
SignalR позволяет легко реализовать обмен данными в реальном времени, поддерживает масштабирование и различные клиенты. Библиотека подходит для разработки интерактивных веб-приложений, чатов и систем уведомлений.