Sobes.tech
Middle

Mis on SignalR?

sobes.tech AI

Vastus AI-lt

SignalR on ASP.NET Core'i raamatukogu, mis võimaldab lisada WebSocket ja Long Polling funktsionaalsust veebirakendustele, et luua reaalajas interaktiivseid stsenaariume.

See tagab kahepoolse suhtluse serveri ja kliendi vahel.

Peamised kasutusstsenaariumid:

  • Vestlusrakendused.
  • Veebipõhised mängud.
  • Andmete reaalajas uuendamine (näiteks graafikud, teated).
  • Kasutajate aktiivsuse jälgimine.

Peamised komponendid:

  • Hubid (Hubs): Klasid, mis töötlevad sisenevaid klientkutsungeid ja saadavad sõnumeid klientidele.
  • Ühendused (Connections): Esindavad kliendi ühendusi. Need võivad olla loodud WebSocketi, Server-Sent Events või Long Polling abil (sõltuvalt kliendi ja serveri toetusest).

Näide hubi loomise kohta:

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

public class MyHub : Hub
{
    // Meetod, mida klient võib kutsuda
    public async Task SendMessage(string user, string message)
    {
        // Sõnumi saatmine kõigile ühendatud klientidele
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfiguratsioon Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Hubi kaardistamine URL-ile
});

Kliendi poolel (JavaScript):

// npm kasutamine
// npm install @microsoft/signalr

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

// Sissetulevate sõnumite töötlemine
hubConnection.on("ReceiveMessage", (user, message) => {
    // Sõnumi töötlemise loogika
    console.log(`${user}: ${message}`);
});

// Ühenduse avamine
hubConnection.start()
    .then(() => console.log("Ühendus algas"))
    .catch(err => console.error(err.toString()));

// Sõnumi saatmine serverile
// hubConnection.invoke("SendMessage", "Kliendi", "Tere kliendilt!");

SignalR valib automaatselt optimaalse transpordi vastavalt kliendi ja serveri võimalustele, alustades WebSocketist ja lülitudes vanemate protokollide juurde, kui neid pole saadaval. See tagab laia ühilduvuse.