Middle
Τι είναι το SignalR;
sobes.tech AI
Απάντηση από AI
Το SignalR είναι μια βιβλιοθήκη για το ASP.NET Core που επιτρέπει την προσθήκη λειτουργιών WebSocket και Long Polling σε web εφαρμογές για τη δημιουργία διαδραστικών σεναρίων σε πραγματικό χρόνο.
Παρέχει αμφίδρομη επικοινωνία μεταξύ διακομιστή και πελάτη.
Οι κύριες περιπτώσεις χρήσης:
- Εφαρμογές συνομιλίας.
- Online παιχνίδια.
- Ενημέρωση δεδομένων σε πραγματικό χρόνο (π.χ. γραφήματα, ειδοποιήσεις).
- Παρακολούθηση δραστηριότητας χρηστών.
Βασικά συστατικά:
- Hubs: Κλάσεις που χειρίζονται εισερχόμενες κλήσεις από πελάτες και στέλνουν μηνύματα σε πελάτες.
- Συνδέσεις: Αντιπροσωπεύουν τις συνδέσεις πελατών. Μπορούν να εγκατασταθούν μέσω WebSocket, Server-Sent Events ή Long Polling (ανάλογα με την υποστήριξη του πελάτη και του διακομιστή).
Παράδειγμα δημιουργίας ενός hub:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Μέθοδος που μπορεί να καλεστεί από τον πελάτη
public async Task SendMessage(string user, string message)
{
// Αποστολή μηνύματος σε όλους τους συνδεδεμένους πελάτες
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Ρύθμιση στο Startup.cs:
// Στο ConfigureServices
services.AddSignalR();
// Στο Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Χαρτογράφηση του hub στη διεύθυνση URL
});
Στην πλευρά του πελάτη (JavaScript):
// Επιλογή με npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL του hub
.build();
// Επεξεργασία εισερχόμενων μηνυμάτων από τον διακομιστή
hubConnection.on("ReceiveMessage", (user, message) => {
// Λογική επεξεργασίας του ληφθέντος μηνύματος
console.log(`${user}: ${message}`);
});
// Άνοιγμα σύνδεσης
hubConnection.start()
.then(() => console.log("Η σύνδεση ξεκίνησε"))
.catch(err => console.error(err.toString()));
// Αποστολή μηνύματος στον διακομιστή
// hubConnection.invoke("SendMessage", "Πελάτης", "Γειά από τον πελάτη!");
Το SignalR επιλέγει αυτόματα το βέλτιστο μεταφορά ανάλογα με τις δυνατότητες του πελάτη και του διακομιστή, ξεκινώντας με WebSocket και μεταβαίνοντας σε παλαιότερα πρωτόκολλα αν δεν είναι διαθέσιμα. Αυτό εξασφαλίζει ευρεία συμβατότητα.