Εισαγωγή SSE
Το SSE σημαίνει Server-Sent Events, που κυριολεκτικά σημαίνει ότι ο διακομιστής προωθεί πληροφορίες στον πελάτη. Η ΚΑΛΟ είναι μονόδρομος,Ο διακομιστής μπορεί να στείλει πληροφορίες μόνο στον πελάτηΟ υπολογιστής-πελάτης μπορεί να λάβει το αίτημα SSE μόνο μετά την ενεργοποίηση της πρώτης φοράς και δεν μπορεί να απαντήσει.
Τα βασικά χαρακτηριστικά του SSE περιλαμβάνουν:
- Ευκολία στη χρήση: Το SSE χρησιμοποιεί μορφές δεδομένων που βασίζονται σε κείμενο, όπως απλό κείμενο, JSON κ.λπ., καθιστώντας σχετικά απλή την αποστολή και την ανάλυση δεδομένων.
- Μονόδρομη επικοινωνία: Το SSE υποστηρίζει μονόδρομη επικοινωνία μεταξύ του διακομιστή και του πελάτη, όπου ο διακομιστής μπορεί να προωθήσει ενεργά δεδομένα στον πελάτη, ενώ ο πελάτης μπορεί να λάβει μόνο τα δεδομένα.
- Σε πραγματικό χρόνο: Το SSE δημιουργεί μακροπρόθεσμες συνδέσεις, επιτρέποντας στους διακομιστές να προωθούν δεδομένα σε πελάτες σε πραγματικό χρόνο χωρίς συχνά αιτήματα.
SSE εναντίον WebSocket
Το WebSocket είναι μια άλλη τεχνολογία Ιστού που χρησιμοποιείται για την ενεργοποίηση αμφίδρομης επικοινωνίας σε πραγματικό χρόνο, η οποία διαφέρει από το SSE κατά κάποιο τρόπο. Ακολουθεί μια σύγκριση μεταξύ SSE και WebSocket:
- Κατεύθυνση ώθησης δεδομένων: Το SSE είναι μια μονόδρομη επικοινωνία μεταξύ του διακομιστή και του πελάτη και ο διακομιστής μπορεί να προωθήσει ενεργά δεδομένα στον πελάτη. Το WebSocket, από την άλλη πλευρά, είναι αμφίδρομη επικοινωνία, επιτρέποντας αμφίδρομη ανταλλαγή δεδομένων σε πραγματικό χρόνο μεταξύ του διακομιστή και του πελάτη.
- Δημιουργία σύνδεσης: Το SSE χρησιμοποιεί μεγάλες συνδέσεις που βασίζονται σε HTTP για τη δημιουργία συνδέσεων μέσω συνηθισμένων αιτημάτων και απαντήσεων HTTP, με αποτέλεσμα την προώθηση δεδομένων σε πραγματικό χρόνο. Τα WebSockets χρησιμοποιούν προσαρμοσμένα πρωτόκολλα για να ενεργοποιήσουν την αμφίδρομη επικοινωνία δημιουργώντας συνδέσεις WebSocket.
- Συμβατότητα: Δεδομένου ότι το SSE βασίζεται στο πρωτόκολλο HTTP, μπορεί να χρησιμοποιηθεί στα περισσότερα σύγχρονα προγράμματα περιήγησης και δεν απαιτεί πρόσθετες αναβαθμίσεις πρωτοκόλλου. Τα WebSockets υποστηρίζονται επίσης στη συντριπτική πλειοψηφία των σύγχρονων προγραμμάτων περιήγησης, αλλά μπορεί να είναι προβληματικά σε ορισμένα ειδικά περιβάλλοντα δικτύου.
- Ισχύοντα σενάρια: Το SSE είναι κατάλληλο για σενάρια όπου ο διακομιστής προωθεί δεδομένα στον πελάτη σε πραγματικό χρόνο, όπως ενημερώσεις τιμών μετοχών, ειδήσεις σε πραγματικό χρόνο κ.λπ. Το WebSocket είναι κατάλληλο για σενάρια που απαιτούν αμφίδρομη επικοινωνία σε πραγματικό χρόνο, όπως εφαρμογές συνομιλίας και συλλογική επεξεργασία πολλών ατόμων.
- Ανάλογα με τις συγκεκριμένες επιχειρηματικές σας ανάγκες και σενάρια, η επιλογή SSE ή WebSocket εξαρτάται από τις πραγματικές σας ανάγκες. Εάν χρειάζεστε μόνο έναν διακομιστή για να προωθήσετε δεδομένα στους πελάτες προς μία κατεύθυνση και θέλετε να τα διατηρήσετε απλά και συμβατά, το SSE είναι μια καλή επιλογή. Εάν πρέπει να επιτύχετε αμφίδρομη επικοινωνία ή εάν χρειάζεστε πιο προηγμένες λειτουργίες και έλεγχο, τότε το WebSocket μπορεί να ταιριάζει καλύτερα στις ανάγκες σας.
Μορφή ροής συμβάντων SSE
Μια ροή συμβάντων είναι μια απλή ροή δεδομένων κειμένου που θα πρέπει να κωδικοποιηθεί σε μορφή UTF-8. Ροή συμβάντωνΤο μήνυμα διαχωρίζεται με ένα ζεύγος αλλαγών γραμμής。 Οι γραμμές σχολίων συμπεριφοράς που ξεκινούν με άνω και κάτω τελεία παραβλέπονται. Κάθε πεδίο αντιπροσωπεύεται από ένα όνομα πεδίου, ακολουθούμενο από άνω και κάτω τελεία και, στη συνέχεια, δεδομένα κειμένου για την τιμή αυτού του πεδίου.
Τα πεδία είναι τα εξής:
γεγονός: Μια συμβολοσειρά που χρησιμοποιείται για τον προσδιορισμό του τύπου συμβάντος. Εάν καθοριστεί αυτή η συμβολοσειρά, το πρόγραμμα περιήγησης αποστέλλει ένα συμβάν με το καθορισμένο όνομα συμβάντος στον κατάλληλο ακροατή. Ο υπολογιστής-πελάτης θα πρέπει να χρησιμοποιήσει το addEventListener() για να ακούσει το καθορισμένο συμβάν. Εάν ένα μήνυμα δεν καθορίζει ένα όνομα συμβάντος, τότε μπορεί να κληθεί το πρόγραμμα χειρισμού onmessage.
δεδομένα: Το πεδίο δεδομένων του μηνύματος. Όταν το EventSource λαμβάνει πολλές διαδοχικές γραμμές που ξεκινούν με δεδομένα:, τις συνενώνει, εισάγοντας μια αλλαγή γραμμής μεταξύ τους. Η αλλαγή γραμμής στο τέλος αφαιρείται.
αναγνωριστικό: Αναγνωριστικό συμβάντος, το οποίο γίνεται η τιμή ιδιότητας της εσωτερικής ιδιότητας "Τελευταίο αναγνωριστικό συμβάντος" του τρέχοντος αντικειμένου EventSource.
Επανάληψη: η ώρα για επανασύνδεση. Εάν χαθεί η σύνδεση με τον διακομιστή, το πρόγραμμα περιήγησης θα περιμένει το καθορισμένο χρονικό διάστημα και στη συνέχεια θα προσπαθήσει να επανασυνδεθεί. Αυτός πρέπει να είναι ένας ακέραιος αριθμός που καθορίζει το χρόνο επανασύνδεσης σε χιλιοστά του δευτερολέπτου. Εάν έχει καθοριστεί μια μη ακέραια τιμή, το πεδίο παραβλέπεται.
Παρουσία EventSource
Η διασύνδεση EventSource είναι η διασύνδεση μεταξύ του περιεχομένου web και του διακομιστή για την αποστολή συμβάντων.
Ιδιότητα EventHandler
Το EventSource.onopen καλείται όταν η σύνδεση είναι ανοιχτή. Το EventSource.onmessage καλείται όταν λαμβάνεται ένα μήνυμα χωρίς χαρακτηριστικό συμβάντος. Το EventSource.onerror καλείται σε εξαιρέσεις σύνδεσης.
Διακομιστής SSE (ASP.NET πυρήνας)
Δημιουργήστε ένα νέο έργο ASP.NET Core με το .NET 8 και ο κωδικός του ελεγκτή είναι ο εξής:
Για τον υπολογιστή-πελάτη που δημιουργεί τη σύνδεση, στείλτε ένα μήνυμα στον υπολογιστή-πελάτη κάθε δεύτερο διάστημα.
Πελάτης SSE
Γράψτε τον κώδικα πελάτη στη σελίδα Προβολή χρησιμοποιώντας html και js ως εξής:
Ξεκινήστε το έργο με τα ακόλουθα αποτελέσματα:
Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή. |