SignalR - Real-time komunikácia

V dnešnej dobe, keď sa od aplikácií očakáva, že budú reagovať v reálnom čase, je SignalR ideálnym nástrojom pre dosiahnutie tohoto cieľa. Od chatovacích aplikácií a online hier po aktualizácie stavov v reálnom čase – SignalR poskytuje škálovoľahké a jednoduché API na obojsmernú komunikáciu medzi serverom a klientom.

V tomto článku sa pozrieme na to, čo SignalR je, ako funguje a ako ho môžete implementovať vo svojej aplikácii.


Čo je SignalR?

SignalR je knižnica od Microsoftu pre ASP.NET, ktorá umožňuje štandardné obojsmerné spojenie medzi serverom a klientmi v reálnom čase. Hlavným cieľom SignalR je odstrániť potrebu opakovaného posielania požiadaviek na server (polling) a namiesto toho zabezpečiť perzistentné spojenie, cez ktoré server aj klienti môžu komunikovať.

Príklady využitia

  • Chatovacie aplikácie: Posielanie a prijímanie správ v reálnom čase.
  • Herné aplikácie: Synchrónny stav hry medzi hráčmi.
  • Kolaboratívne aplikácie: Napríklad Google Docs, kde viacerí používatelia môžu upravovať ten istý dokument.
  • Aktualizácie v reálnom čase: Informácie o pohyboch na burze, stave objednávky alebo nových príspevkoch na sociálnej sieti.

Ako SignalR funguje

SignalR používa rôzne transportné mechanizmy na vytvorenie obojsmernej komunikácie medzi klientom a serverom:

  1. WebSockets (preferovaný mechanizmus):
    • Plne duplexný komunikačný kanál medzi klientom a serverom.
    • Najrýchlejší a najefektívnejší spôsob prenosu.
  2. Server-Sent Events (SSE):
    • Umožňuje serveru posielať jednosmerné notifikácie klientovi.
    • Funguje iba na moderných prehliadačoch.
  3. Long Polling:
    • Klient opakovane posiela požiadavky na server a čaká na odpoveď.
    • Menej efektívne, no široko podporované.

SignalR automaticky vyberá najlepší dostupný mechanizmus v závislosti od prostredia klienta a servera.


Hlavné komponenty SignalR

1. Hub

Hlavný komponent SignalR aplikácie. Umožňuje serveru odosielať správy klientom a naopak. Trieda dedí z Hub a poskytuje metódy, ktoré môžu byť volané z klienta.

using Microsoft.AspNetCore.SignalR;

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

2. Klient

Klientska aplikácia sa pripojuje k Hubu pomocou SignalR Client Library. Klienti môžu byť webové, desktopové alebo mobilné aplikácie.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .build();

connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

connection.start().then(() => {
    console.log("Connected to SignalR");
    connection.invoke("SendMessage", "Ivan", "Hello, world!")
        .catch(err => console.error(err));
});

Ako implementovať SignalR aplikáciu

1. Pridanie SignalR do ASP.NET aplikácie

Najprv pridajte balík SignalR do svojho projektu:

dotnet add package Microsoft.AspNetCore.SignalR

2. Konfigurácia servera

Pridajte SignalR do middleware pipeline:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapHub("/chathub");

app.Run();

3. Vytvorenie klienta

Použite SignalR Client Library na pripojenie klienta k Hubu. Pre web klientov pridajte do projektu SignalR JavaScript knihovnú:

<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.0/signalr.min.js"></script>

Potom implementujte klientské správanie (ako je znázornené vyššie).


Výhody SignalR

  • Reálny čas: Poskytuje okamžite viditeľné aktualizácie pre klientov.
  • Široká podpora: Funguje na webových, mobilných aj desktopových aplikáciách.
  • Automatické prispôsobenie: SignalR automaticky vyberá najvhodnejší transportný mechanizmus.
  • Jednoduchá integrácia: Je ľahko konfigurovateľná a dobre integrovaná do ASP.NET.

Obmedzenia SignalR

  • Škálovateľnosť: Pri veľkom počte pripojených klientov môže SignalR vyžadovať viac zdrojov alebo použitie Azure SignalR Service.
  • Závislosť od transportu: WebSockets vyžadujú podporu na strane servera aj klienta.
  • Sieťové obmedzenia: Proxy alebo firewally môžu blokovať WebSockets.

Záver

SignalR je výkonný nástroj na pridanie reálnočasovej komunikácie do vašej aplikácie. Poskytuje široké možnosti pre rôzne typy aplikácií, či už ide o chatovacie platformy, hry alebo sledovanie stavov v reálnom čase. Ak hľadáte efektívny a škálovateľný spôsob, ako zabezpečiť obojsmernú komunikáciu, SignalR je ideálnou voľbou.

Máte projekt? Prvá konzultácia je zadarmo

Či už máte hotové zadanie alebo len nápad - odpoviem vám do 24 hodín.

Kapacita obmedzená: V danom čase aktívne pracujem maximálne na 2 projektoch súčasne, aby som zachoval vysokú kvalitu.

Napísať Email 📞 Zavolať teraz LinkedIn Profil