Sobes.tech
Middle

Šta je SignalR?

sobes.tech АИ

Одговор од АИ

SignalR je biblioteka za ASP.NET Core koja omogućava dodavanje WebSocket i Long Polling funkcionalnosti u veb aplikacije za kreiranje interaktivnih scenarija u realnom vremenu.

Obezbeđuje dvosmernu komunikaciju između servera i klijenta.

Glavni scenariji korišćenja:

  • Aplikacije za ćaskanje.
  • Online igre.
  • Ažuriranje podataka u realnom vremenu (npr. grafikoni, obaveštenja).
  • Monitoring aktivnosti korisnika.

Glavne komponente:

  • Hub-ovi: Klase koje obrađuju dolazne pozive od klijenata i šalju poruke klijentima.
  • Veze: Predstavljaju veze klijenata. Mogu biti uspostavljene putem WebSocket, Server-Sent Events ili Long Polling (u zavisnosti od podrške klijenta i servera).

Primer kreiranja hub-a:

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

public class MyHub : Hub
{
    // Metod koji može biti pozvan od strane klijenta
    public async Task SendMessage(string user, string message)
    {
        // Slanje poruke svim povezanima klijentima
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfiguracija u Startup.cs:

// U ConfigureServices
services.AddSignalR();

// U Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapiranje hub-a na URL
});

Na strani klijenta (JavaScript):

// Opcija sa npm
// npm install @microsoft/signalr

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

// Obrada dolaznih poruka sa servera
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logika obrade primljene poruke
    console.log(`${user}: ${message}`);
});

// Otvaranje veze
hubConnection.start()
    .then(() => console.log("Veza uspostavljena"))
    .catch(err => console.error(err.toString()));

// Slanje poruke na server
// hubConnection.invoke("SendMessage", "Klijent", "Zdravo od klijenta!");

SignalR automatski bira optimalni transport u zavisnosti od mogućnosti klijenta i servera, počevši od WebSocket-a i prebacujući se na starije protokole ako nisu dostupni. Ovo obezbeđuje široku kompatibilnost.