Middle
Czym jest SignalR?
sobes.tech AI
Odpowiedź od AI
SignalR to biblioteka dla ASP.NET Core, umożliwiająca dodanie funkcji WebSocket i Long Polling do aplikacji internetowych w celu tworzenia interaktywnych scenariuszy w czasie rzeczywistym.
Zapewnia dwukierunkową komunikację między serwerem a klientem.
Główne scenariusze użycia:
- Aplikacje czatu.
- Gry online.
- Aktualizacja danych w czasie rzeczywistym (np. wykresy, powiadomienia).
- Monitorowanie aktywności użytkowników.
Główne komponenty:
- Hubs: Klasy obsługujące przychodzące wywołania od klientów i wysyłające wiadomości do klientów.
- Połączenia: Reprezentują połączenia klientów. Mogą być ustanowione przez WebSocket, Server-Sent Events lub Long Polling (w zależności od obsługi przez klienta i serwer).
Przykład tworzenia hub:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Metoda wywoływana przez klienta
public async Task SendMessage(string user, string message)
{
// Wysyłanie wiadomości do wszystkich podłączonych klientów
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Konfiguracja w Startup.cs:
// W ConfigureServices
services.AddSignalR();
// W Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Mapowanie hub na URL
});
Po stronie klienta (JavaScript):
// Opcja z npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL hub
.build();
// Obsługa przychodzących wiadomości z serwera
hubConnection.on("ReceiveMessage", (user, message) => {
// Logika obsługi odebranej wiadomości
console.log(`${user}: ${message}`);
});
// Otwarcie połączenia
hubConnection.start()
.then(() => console.log("Połączenie nawiązane"))
.catch(err => console.error(err.toString()));
// Wysyłanie wiadomości do serwera
// hubConnection.invoke("SendMessage", "Klient", "Witaj od klienta!");
SignalR automatycznie wybiera optymalny transport w zależności od możliwości klienta i serwera, zaczynając od WebSocket i przełączając się na starsze protokoły w razie braku wsparcia. Zapewnia to szeroką kompatybilność.