Sobes.tech
Middle

Какво е SignalR?

sobes.tech AI

Отговор от AI

SignalR е библиотека за ASP.NET Core, която позволява добавяне на функционалности WebSocket и Long Polling към уеб приложения за създаване на интерактивни сценарии в реално време.

Тя осигурява двупосочна комуникация между сървъра и клиента.

Основни сценарии на използване:

  • Чат приложения.
  • Онлайн игри.
  • Актуализиране на данни в реално време (например графики, известия).
  • Мониторинг на активността на потребителите.

Основни компоненти:

  • Hub-ове: класове, които обработват входящите повиквания от клиентите и изпращат съобщения към клиентите.
  • Връзки: представят връзките на клиентите. Могат да бъдат установени чрез 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:

// В ConfigureServices
services.AddSignalR();

// В 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("Връзката е започнала"))
    .catch(err => console.error(err.toString()));

// Изпращане на съобщение към сървъра
// hubConnection.invoke("SendMessage", "Клиент", "Здравей от клиента!");

SignalR автоматично избира оптималния транспорт в зависимост от възможностите на клиента и сървъра, започвайки с WebSocket и превключвайки към по-старите протоколи при липса на поддръжка. Това осигурява широка съвместимост.