Sobes.tech
Middle

Kas yra SignalR?

sobes.tech AI

Atsakymas iš AI

SignalR – tai biblioteka ASP.NET Core, leidžianti pridėti WebSocket ir Long Polling funkcionalumą į žiniatinklio programas, kad būtų galima kurti interaktyvius scenarijus realiuoju laiku.

Ji užtikrina dvipusį ryšį tarp serverio ir kliento.

Pagrindiniai naudojimo scenarijai:

  • Pokalbių programėlės.
  • Internetiniai žaidimai.
  • Duomenų atnaujinimas realiuoju laiku (pvz., grafikai, pranešimai).
  • Vartotojų veiklos stebėjimas.

Pagrindiniai komponentai:

  • Hubai (Hubs): Klasės, apdorojančios įeinančius klientų iškvietimus ir siunčiančios žinutes klientams.
  • Ryšiai (Connections): Atstovauja kliento ryšius. Jie gali būti nustatyti naudojant WebSocket, Server-Sent Events arba Long Polling (priklausomai nuo kliento ir serverio palaikymo).

Pavyzdys, kaip sukurti hubą:

// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

public class MyHub : Hub
{
    // Metodas, kurį gali iškviesti klientas
    public async Task SendMessage(string user, string message)
    {
        // Pranešimo siuntimas visiems prisijungusiems klientams
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfigūracija Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Hub'o susiejimas su URL
});

Kliento pusėje (JavaScript):

// Naudojant npm
// npm install @microsoft/signalr

const hubConnection = new signalR.HubConnectionBuilder()
    .withUrl("/myhub") // Hub'o URL
    .build();

// Apdoroti įeinančias žinutes iš serverio
hubConnection.on("ReceiveMessage", (user, message) => {
    // Žinutės apdorojimo logika
    console.log(`${user}: ${message}`);
});

// Atidaryti ryšį
hubConnection.start()
    .then(() => console.log("Ryšys pradėtas"))
    .catch(err => console.error(err.toString()));

// Siųsti žinutę į serverį
// hubConnection.invoke("SendMessage", "Klientas", "Sveiki iš kliento!");

SignalR automatiškai pasirenka optimalų transportą, priklausomai nuo kliento ir serverio galimybių, pradedant nuo WebSocket ir pereinant prie senesnių protokolų, jei jų nėra. Tai užtikrina plačią suderinamumą.