Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 4163|Απάντηση: 4

[.NET Πυρήνας] Το SSE (1) χρησιμοποιεί το ASP.NET Core ως διακομιστή SSE

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2024-4-5 11:54:12 | | | |
Εισαγωγή 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 ως εξής:


Ξεκινήστε το έργο με τα ακόλουθα αποτελέσματα:



Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Μια απλή σύγκριση της κρυφής μνήμης Garnet και του Redis που αναπτύχθηκε με το .NET
Επόμενος:Το JS ακούει για το συνδυασμό πλήκτρων ctrl + enter
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-4-5 12:03:28 |
Το προεπιλεγμένο API του προγράμματος περιήγησης EventSource επιβάλλει ορισμένους περιορισμούς στους τύπους αιτημάτων που επιτρέπεται να υποβληθούν: οι μόνες διευθύνσεις URL παραμέτρων που επιτρέπεται να μεταβιβαστούν είναι και μεΔιαπιστευτήρια, επομένως:

Δεν μπορείτε να μεταβιβάσετε το σώμα του αιτήματος: Πρέπει να κωδικοποιήσετε όλες τις πληροφορίες που απαιτούνται για την εκτέλεση του αιτήματος στη διεύθυνση URL, η οποία περιορίζεται στους 2000 χαρακτήρες στα περισσότερα προγράμματα περιήγησης.
Δεν μπορείτε να μεταβιβάσετε προσαρμοσμένες κεφαλίδες αιτήματος
Μπορείτε να υποβάλετε μόνο ένα αίτημα GET - δεν μπορεί να καθοριστεί άλλη μέθοδος.
Εάν η σύνδεση διακοπεί, δεν έχετε κανέναν έλεγχο στην πολιτική επανάληψης: το πρόγραμμα περιήγησης προσπαθεί σιωπηλά για εσάς μερικές φορές και στη συνέχεια σταματά, κάτι που δεν είναι αρκετά καλό για οποιονδήποτε τύπο ισχυρής εφαρμογής.


fetch-event-source

Η βιβλιοθήκη παρέχει μια εναλλακτική διεπαφή που βασίζεται στο Fetch API για τη χρήση συμβάντων που αποστέλλονται από διακομιστή. Είναι πλήρως συμβατό με τη μορφή ροής συμβάντων, επομένως εάν έχετε ήδη έναν διακομιστή που εκπέμπει αυτά τα συμβάντα, μπορείτε να τον χρησιμοποιήσετε όπως πριν. Ωστόσο, τώρα έχετε περισσότερο έλεγχο στα αιτήματα και τις απαντήσεις

Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Δημοσιεύτηκε στις 2024-11-14 14:34:25 |
πολυμαθής
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-12-25 16:36:44 |
Μικρή σκωρία Δημοσιεύτηκε στις 2024-4-5 12:03
Το προεπιλεγμένο API του προγράμματος περιήγησης EventSource επιβάλλει ορισμένους περιορισμούς στους τύπους αιτημάτων που επιτρέπονται: η μόνη παράμετρος url που επιτρέπεται να περάσει είναι το withCredentia ...

Μεταγλωττίστε το πακέτο NPM σε ένα σενάριο JavaScript έτοιμο για πρόγραμμα περιήγησης
https://www.itsvse.com/thread-10762-1-1.html
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-12-25 16:48:45 |
Πρόβλημα επανασύνδεσης πηγής συμβάντος SSE (2) μετά την εναλλαγή καρτελών του προγράμματος περιήγησης
https://www.itsvse.com/thread-10906-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com