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.