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.