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:
- WebSockets (preferovaný mechanizmus):
- Plne duplexný komunikačný kanál medzi klientom a serverom.
- Najrýchlejší a najefektívnejší spôsob prenosu.
- Server-Sent Events (SSE):
- Umožňuje serveru posielať jednosmerné notifikácie klientovi.
- Funguje iba na moderných prehliadačoch.
- 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.