Sobes.tech
Middle

Kas ir SignalR?

sobes.tech AI

Atbilde no AI

SignalR ir bibliotēka ASP.NET Core, kas ļauj pievienot WebSocket un Long Polling funkcionalitāti tīmekļa lietojumprogrammām, lai izveidotu reāllaika interaktīvus scenārijus.

Tā nodrošina abpusēju saziņu starp serveri un klientu.

Galvenie lietošanas scenāriji:

  • Čata lietotnes.
  • Tiešsaistes spēles.
  • Datu atjaunināšana reāllaikā (piemēram, grafiki, paziņojumi).
  • Lietotāju aktivitātes uzraudzība.

Galvenās sastāvdaļas:

  • Hubs (Hubs): Klases, kas apstrādā ienākošos klientu izsaukumus un sūta ziņojumus klientiem.
  • Savienojumi (Connections): Apzīmē klientu savienojumus. Tie var tikt izveidoti, izmantojot WebSocket, Server-Sent Events vai Long Polling (atkarībā no klienta un servera atbalsta).

Piemērs, kā izveidot hubu:

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

public class MyHub : Hub
{
    // Metode, ko var izsaukt klients
    public async Task SendMessage(string user, string message)
    {
        // Ziņojuma sūtīšana visiem pieslēgtajiem klientiem
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfigurācija Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Huba maršruts URL
});

Klienta pusē (JavaScript):

// Ar npm
// npm install @microsoft/signalr

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

// Apstrādāt ienākošās ziņas no servera
hubConnection.on("ReceiveMessage", (user, message) => {
    // Ziņojuma apstrādes loģika
    console.log(`${user}: ${message}`);
});

// Atvērt savienojumu
hubConnection.start()
    .then(() => console.log("Savienojums uzsākts"))
    .catch(err => console.error(err.toString()));

// Nosūtīt ziņu uz serveri
// hubConnection.invoke("SendMessage", "Klients", "Sveiki no klienta!");

SignalR automātiski izvēlas optimālo transportu atkarībā no klienta un servera iespējām, sākot ar WebSocket un pārslēdzoties uz vecākiem protokoliem, ja tie nav pieejami. Tas nodrošina plašu saderību.