Sobes.tech
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 и переключаясь на более старые протоколы при их отсутствии. Это обеспечивает широкую совместимость.