Middle
127
questionbank
Что такое SignalR?
Answer from AI
sobes.tech AI
SignalR — это библиотека для ASP.NET Core, позволяющая добавлять WebSocket и Long Polling функциональность в веб-приложения для создания интерактивных сценариев в реальном времени.
Обеспечивает двустороннюю связь между сервером и клиентом.
Основные сценарии использования:
- Чат-приложения.
- Онлайн-игры.
- Обновление данных в реальном времени (например, графики, уведомления).
- Мониторинг активности пользователей.
Основные компоненты:
- Хабы (Hubs): Классы, обрабатывающие входящие вызовы клиентов и отправляющие сообщения клиентам.
- Соединения (Connections): Представляют клиентские подключения. Могут быть установлены через WebSocket, Server-Sent Events или Long Polling (в зависимости от поддержки клиента и сервера).
Пример создания хаба:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Метод, который может быть вызван клиентом
public async Task SendMessage(string user, string message)
{
// Отправка сообщения всем подключенным клиентам
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Конфигурация в Startup.cs:
// In ConfigureServices
services.AddSignalR();
// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Маппинг хаба на URL
});
На стороне клиента (JavaScript):
// Вариант с npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL хаба
.build();
// Обработка входящих сообщений от сервера
hubConnection.on("ReceiveMessage", (user, message) => {
// Логика обработки полученного сообщения
console.log(`${user}: ${message}`);
});
// Открытие соединения
hubConnection.start()
.then(() => console.log("Connection started"))
.catch(err => console.error(err.toString()));
// Отправка сообщения на сервер
// hubConnection.invoke("SendMessage", "Клиент", "Привет от клиента!");
SignalR автоматически выбирает оптимальный транспорт в зависимости от возможностей клиента и сервера, начиная с WebSocket и переключаясь на более старые протоколы при их отсутствии. Это обеспечивает широкую совместимость.