Middle
Kas yra SignalR?
sobes.tech AI
Atsakymas iš AI
SignalR – tai biblioteka ASP.NET Core, leidžianti pridėti WebSocket ir Long Polling funkcionalumą į žiniatinklio programas, kad būtų galima kurti interaktyvius scenarijus realiuoju laiku.
Ji užtikrina dvipusį ryšį tarp serverio ir kliento.
Pagrindiniai naudojimo scenarijai:
- Pokalbių programėlės.
- Internetiniai žaidimai.
- Duomenų atnaujinimas realiuoju laiku (pvz., grafikai, pranešimai).
- Vartotojų veiklos stebėjimas.
Pagrindiniai komponentai:
- Hubai (Hubs): Klasės, apdorojančios įeinančius klientų iškvietimus ir siunčiančios žinutes klientams.
- Ryšiai (Connections): Atstovauja kliento ryšius. Jie gali būti nustatyti naudojant WebSocket, Server-Sent Events arba Long Polling (priklausomai nuo kliento ir serverio palaikymo).
Pavyzdys, kaip sukurti hubą:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Metodas, kurį gali iškviesti klientas
public async Task SendMessage(string user, string message)
{
// Pranešimo siuntimas visiems prisijungusiems klientams
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Konfigūracija Startup.cs:
// In ConfigureServices
services.AddSignalR();
// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Hub'o susiejimas su URL
});
Kliento pusėje (JavaScript):
// Naudojant npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // Hub'o URL
.build();
// Apdoroti įeinančias žinutes iš serverio
hubConnection.on("ReceiveMessage", (user, message) => {
// Žinutės apdorojimo logika
console.log(`${user}: ${message}`);
});
// Atidaryti ryšį
hubConnection.start()
.then(() => console.log("Ryšys pradėtas"))
.catch(err => console.error(err.toString()));
// Siųsti žinutę į serverį
// hubConnection.invoke("SendMessage", "Klientas", "Sveiki iš kliento!");
SignalR automatiškai pasirenka optimalų transportą, priklausomai nuo kliento ir serverio galimybių, pradedant nuo WebSocket ir pereinant prie senesnių protokolų, jei jų nėra. Tai užtikrina plačią suderinamumą.