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

Άποψη: 20007|Απάντηση: 1

[ASP.NET] Εισαγωγή και εισαγωγή στο SignalR

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 5/7/2017 10:21:40 π.μ. | | | |
1. Τι είναι το SignalR:        
Το ASP.NET SignalR είναι μια βιβλιοθήκη κλάσεων που παρέχεται για την απλοποίηση της διαδικασίας προσθήκης ζωντανού περιεχομένου ιστού σε εφαρμογές από προγραμματιστές ανάπτυξης. Η λειτουργία ιστού σε πραγματικό χρόνο αναφέρεται στο να επιτρέπεται στον κώδικα διακομιστή να προωθεί ενεργά περιεχόμενο στους πελάτες ανά πάσα στιγμή, αντί να περιμένει ο διακομιστής ένα αίτημα από τον πελάτη (πριν επιστρέψει περιεχόμενο).
Όλα τα "ζωντανά" είδη λειτουργιών ιστού μπορούν να προστεθούν στην εφαρμογή ASP.NET σας χρησιμοποιώντας το SignalR. Το πιο συχνά χρησιμοποιούμενο παράδειγμα είναι τα δωμάτια συνομιλίας, αλλά μπορούμε να κάνουμε πολλά περισσότερα από αυτό. Εξετάστε τις ακόλουθες καταστάσεις: οι χρήστες πρέπει να ανανεώνουν συνεχώς την ιστοσελίδα για να βλέπουν τα πιο πρόσφατα δεδομένα. Ή ανακτήστε (και εμφανίστε) νέα δεδομένα στη σελίδα εφαρμόζοντας μεγάλη δημοσκόπηση, τότε μπορείτε να εξετάσετε το ενδεχόμενο να χρησιμοποιήσετε το SignalR για να το κάνετε. Για παράδειγμα: πίνακες εργαλείων και εφαρμογές παρακολούθησης. Συνεργατικές εφαρμογές (π.χ. πολλά άτομα που επεξεργάζονται έγγραφα ταυτόχρονα). Ενημερώσεις προόδου εργασίας και φόρμες παρουσίασης σε πραγματικό χρόνο κ.λπ.
Το SignalR είναι επίσης κατάλληλο για νεότερους τύπους εφαρμογών web που απαιτούν ενημερώσεις υψηλής συχνότητας από τον διακομιστή, όπως παιχνίδια σε πραγματικό χρόνο. Εδώ είναι ένα καλό παράδειγμα: ShoorR.
Το SignalR παρέχει ένα απλό API για τους χρήστες να δημιουργούν κλήσεις απομακρυσμένης διαδικασίας (RPC) από διακομιστή σε πελάτη που είναι εύκολα προσβάσιμες από την πλευρά του διακομιστή. Καθαρός κώδικας. Το SignalR περιλαμβάνει επίσης συνδέσεις (π.χ. συμβάντα σύνδεσης και αποσύνδεσης) και ομαδοποίηση συνδέσεων.

Το SignalR μπορεί να διαχειριστεί αυτόματα τις συνδέσεις. Και σας επιτρέπει να στέλνετε μηνύματα μετάδοσης σε όλους τους συνδεδεμένους πελάτες, ακριβώς όπως ένα chat room. Φυσικά, εκτός από τη μαζική αποστολή, μπορείτε να στείλετε μηνύματα και σε συγκεκριμένους πελάτες. Η σύνδεση μεταξύ του πελάτη και του διακομιστή είναι επίμονη, σε αντίθεση με το παραδοσιακό πρωτόκολλο HTTP, το οποίο απαιτεί την αποκατάσταση της σύνδεσης για κάθε επικοινωνία.
Το SignalR υποστηρίζει τη δυνατότητα "προώθηση διακομιστή", όπου ο κώδικας διακομιστή μπορεί να καλέσει τον κώδικα πελάτη στο πρόγραμμα περιήγησης χρησιμοποιώντας κλήσεις απομακρυσμένης διαδικασίας (RPC) αντί για αιτήματα που χρησιμοποιούνται συνήθως στον Ιστό - το αντίστοιχο μοντέλο επεξεργασίας.
Οι εφαρμογές SignalR μπορούν να επεκταθούν σε χιλιάδες υπολογιστές-πελάτες χρησιμοποιώντας Service Bus, SQL SERVER ή Redis.
Το SignalR είναι ανοιχτού κώδικα και είναι προσβάσιμο μέσω του GitHub.

2. SignalR και WebSocket        

Το ignalR χρησιμοποιεί τη μέθοδο μεταφοράς WebSocket - όπου είναι δυνατόν. Και μεταβείτε αυτόματα στην παλιά μέθοδο μεταφοράς (π.χ. μακρά σύνδεση HTTP). Μπορείτε σίγουρα να γράψετε την εφαρμογή σας απευθείας με το WebSockets, αλλά η χρήση του SignalR σημαίνει ότι θα έχετε περισσότερη επιπλέον λειτουργικότητα χωρίς να χρειάζεται να ανακαλύψετε ξανά τον τροχό. Το πιο σημαντικό, μπορείτε να εστιάσετε στην υλοποίηση της επιχείρησης χωρίς να σκεφτείτε να δημιουργήσετε συμβατό κώδικα ξεχωριστά για τον παλιό πελάτη. Το SignalR σάς επιτρέπει επίσης να αποφύγετε να ανησυχείτε για ενημερώσεις WebSocket, καθώς το SignalR θα συνεχίσει να ενημερώνεται για να υποστηρίζει την αλλαγή των υποκείμενων μεθόδων μεταφοράς για να παρέχει μια συνεπή διεπαφή πρόσβασης για εφαρμογές σε διαφορετικές εκδόσεις WebSockets.
Φυσικά, μπορείτε να δημιουργήσετε μια λύση που χρησιμοποιεί μόνο μεταφορά WebSocket και το SignalR παρέχει όλες τις δυνατότητες που μπορεί να χρειαστείτε για να γράψετε τον δικό σας κώδικα, όπως να επιστρέψετε σε άλλες μεθόδους μεταφοράς και να τροποποιήσετε την εφαρμογή σας για νεότερες υλοποιήσεις WebSocket.

3. Μεταφορά και επιστροφή      

Το SignalR είναι μια αφαίρεση της τεχνολογίας μεταφοράς που απαιτείται για την υλοποίηση λειτουργιών σε πραγματικό χρόνο μεταξύ πελατών και διακομιστών. Το SignalR ξεκινά πρώτα τη σύνδεση με HTTP και ελέγχει εάν το WebSocket είναι διαθέσιμο - εάν είναι σίγουρο, αναβαθμίστε στη σύνδεση του WebSocket. Το WebSocket είναι η ιδανικότερη μέθοδος μετάδοσης για το SignalR, επειδή κάνει την πιο αποτελεσματική χρήση της μνήμης του διακομιστή, έχει τη χαμηλότερη καθυστέρηση και ολοκληρωμένες υποκείμενες λειτουργίες (όπως η πλήρως αμφίδρομη επικοινωνία μεταξύ πελάτη και διακομιστή), αλλά έχει επίσης τις αυστηρότερες απαιτήσεις: ο διακομιστής πρέπει να χρησιμοποιεί λειτουργικό σύστημα Windows Server 2012 ή Windows 8 και ταυτόχρονα. .NET Framework έκδοση 4.5 και νεότερη. Εάν δεν πληρούνται αυτές οι απαιτήσεις, το SignalR θα προσπαθήσει να χρησιμοποιήσει μια εναλλακτική μέθοδο μετάδοσης για τη σύνδεση.

4. Αποστολή HTML5         

Η μέθοδος μεταφοράς που χρησιμοποιείται εξαρτάται από το αν το πρόγραμμα περιήγησης πελάτη υποστηρίζει HTML5, διαφορετικά θα χρησιμοποιηθεί η παλιά μέθοδος μεταφοράς.
          WebSocket (εάν τόσο ο διακομιστής όσο και το πρόγραμμα περιήγησης υποστηρίζουν WebSocket). Το WebSocket είναι ο μόνος τρόπος για να δημιουργήσετε μια πραγματική και ανθεκτική αμφίδρομη σύνδεση τόσο από την πλευρά του πελάτη όσο και από την πλευρά του διακομιστή. Φυσικά, το WebSocket έχει επίσης τις πιο αυστηρές απαιτήσεις: υποστηρίζεται μόνο στις πιο πρόσφατες εκδόσεις των IE, Chrome και FF και εφαρμόζεται μόνο εν μέρει σε άλλα προγράμματα περιήγησης όπως το Opera και το Safari.
Ο διακομιστής στέλνει συμβάντα, γνωστά και ως EventSource (εάν το πρόγραμμα περιήγησης υποστηρίζει συμβάντα αποστολής διακομιστή, βασικά όλα τα προγράμματα περιήγησης εκτός από το IE υποστηρίζουν αυτήν τη δυνατότητα).

5.Μετάδοση κομήτη

Οι ακόλουθοι τύποι μεταφοράς βασίζονται στο μοντέλο εφαρμογής web Comet, όπου το πρόγραμμα περιήγησης ή ο πελάτης θα διατηρήσει ένα μεγάλο αίτημα σύνδεσης HTTP και ο διακομιστής μπορεί να προωθήσει δεδομένα στον πελάτη χωρίς ρητή αίτηση από τον πελάτη.
Forever Frame (μόνο IE) Το Forever Frame θα δημιουργήσει ένα κρυφό IFrame που στέλνει ένα αίτημα στον server που δεν θα ολοκληρωθεί. Στη συνέχεια, ο διακομιστής στέλνει συνεχώς σενάρια στον πελάτη και εκτελείται αμέσως από τον πελάτη, δηλαδή μια μονόδρομη σύνδεση σε πραγματικό χρόνο από τον διακομιστή στον πελάτη. Η σύνδεση υπολογιστή-πελάτη με διακομιστή χρησιμοποιεί διαφορετική σύνδεση από αυτήν τη σύνδεση. Για παράδειγμα, μια τυπική αίτηση HTML δημιουργεί μια νέα σύνδεση για κάθε δεδομένα που αποστέλλονται.
Το Ajax long polling δεν δημιουργεί μια μόνιμη σύνδεση, αλλά μάλλον δημοσκοπήσεις κάνοντας συνεχώς αιτήματα στον διακομιστή. Περιμένετε να απαντήσει ο διακομιστής και κλείστε αυτήν τη σύνδεση σε κάθε σύνδεση και, στη συνέχεια, κάντε αμέσως μια νέα αίτηση. Φυσικά, αυτό θα προκαλέσει κάποια καθυστέρηση κατά την επαναφορά και επανασύνδεση της σύνδεσης.
Για πληροφορίες σχετικά με τις μεθόδους μεταφοράς που υποστηρίζονται από διάφορες διαμορφώσεις, ανατρέξτε στην ενότητα Υποστηριζόμενες πλατφόρμες. (Ο IE απαιτεί 8 ή παραπάνω, άλλα προγράμματα περιήγησης είναι η τρέχουσα έκδοση -1)
Διαδικασία επιλογής μεθόδου μεταφοράς
Η παρακάτω λίστα δείχνει πώς το SignalR αποφασίζει ποιον τύπο θα χρησιμοποιήσει για μετάδοση.
IE8 και παλαιότερες εκδόσεις, χρησιμοποιήστε μεγάλη ψηφοφορία.
Εάν έχει ρυθμιστεί το JSONP (δηλ. η παράμετρος jsonp έχει οριστεί σε true κατά τη σύνδεση), χρησιμοποιήστε μεγάλη ανίχνευση.
Εάν χρησιμοποιείτε σύνδεση μεταξύ τομέων (δηλαδή, το τελικό σημείο SignalR και η σελίδα δεν βρίσκονται στον ίδιο τομέα), χρησιμοποιήστε WebSockets εάν πληρούνται οι ακόλουθες προϋποθέσεις:
Ο υπολογιστής-πελάτης υποστηρίζει κοινή χρήση πόρων μεταξύ τομέων (CORS), ανατρέξτε στο CORS στη διεύθυνση για λεπτομέρειες
Ο πελάτης υποστηρίζει WebSocket
Ο διακομιστής υποστηρίζει WebSocket
Εάν δεν πληρούται κάποια από τις παραπάνω προϋποθέσεις, χρησιμοποιείται μεγάλη δημοσκόπηση. Για περισσότερες πληροφορίες σχετικά με τις συνδέσεις μεταξύ τομέων, ανατρέξτε στο θέμα Τρόπος δημιουργίας συνδέσεων μεταξύ τομέων.
Εάν δεν ρυθμίσετε τη χρήση του JSONP και η σύνδεση δεν είναι διατομεακή, χρησιμοποιήστε το WebSocket, φυσικά, με την προϋπόθεση ότι τόσο ο πελάτης όσο και ο διακομιστής υποστηρίζουν το WebSocket.
Εάν ο υπολογιστής-πελάτης ή ο διακομιστής δεν υποστηρίζει WebSockets, χρησιμοποιήστε το διακομιστή για την αποστολή συμβάντων.
Εάν ο διακομιστής στέλνει ένα συμβάν δεν είναι διαθέσιμο, χρησιμοποιήστε ένα Forever Frame.
Εάν το Forever Frame δεν είναι διαθέσιμο, χρησιμοποιήστε μεγάλη ψηφοφορία.
Παρακολούθηση μετάδοσης
Μπορείτε να δείτε ποια μέθοδο μεταφοράς χρησιμοποιεί η εφαρμογή σας ενεργοποιώντας την καταγραφή Hub και στην κονσόλα του προγράμματος περιήγησής σας.
Για να ενεργοποιήσετε την καταγραφή, προσθέστε την ακόλουθη εντολή στην εφαρμογή πελάτη:
nnection.hub.logging = αληθές;

6. Επιθεώρηση και μεταφορά:    

Μπορείτε να δείτε ποια μέθοδο μεταφοράς χρησιμοποιεί η εφαρμογή σας ενεργοποιώντας την καταγραφή Hub και στην κονσόλα του προγράμματος περιήγησής σας. Για να ενεργοποιήσετε την καταγραφή, προσθέστε την ακόλουθη εντολή στην εφαρμογή πελάτη:
    nnection.hub.logging = αληθές;
        $.connection.hub.logging = true;
Στο IE, πατήστε F12 για να ανοίξετε τα εργαλεία προγραμματιστή και κάντε κλικ στην καρτέλα Κονσόλα.

Στο Chrome, πατήστε Ctrl+Shift+J για να ανοίξετε την κονσόλα


Παρατηρώντας τη σύνδεση στην κονσόλα, μπορείτε να δείτε τη μέθοδο μετάδοσης που χρησιμοποιεί το SignalR.


7. Καθορισμένη αποστολή:

Η διαπραγμάτευση της μεθόδου μετάδοσης απαιτεί συγκεκριμένο χρόνο και τους πόρους του διακομιστή/πελάτη. Εάν το περιβάλλον του υπολογιστή-πελάτη είναι γνωστό, τότε η μέθοδος μεταφοράς μπορεί να καθοριστεί κατά την έναρξη της σύνδεσης για τη βελτίωση της απόδοσης. Ο ακόλουθος κώδικας δείχνει τη χρήση του μεγάλου polling του Ajax απευθείας κατά την έναρξη της σύνδεσης, εάν ο πελάτης είναι γνωστό ότι υποστηρίζει οποιοδήποτε άλλο πρωτόκολλο:
connection.start({ transport: 'longPolling' });
Εάν θέλετε ένας πελάτης να διαπραγματευτεί τη μεταφορά με μια συγκεκριμένη σειρά, μπορείτε να καθορίσετε τη σειρά με την οποία επιχειρείται η διαπραγμάτευση. Ο παρακάτω κώδικας δείχνει πώς να δοκιμάσετε να χρησιμοποιήσετε πρώτα τα WebSockets και να χρησιμοποιήσετε μεγάλη δημοσκόπηση αμέσως μετά την αποτυχία.
connection.start({ transport: ['webSockets','longPolling'] });
Οι σταθερές συμβολοσειράς που καθορίζονται από τον χρήστη ορίζονται ως εξής:
Υποδοχές web
forverFrame
serverSentEvents
longΔημοσκόπηση

8. Συνδέσεις και διανομείς Το SignalR API περιλαμβάνει δύο μοντέλα επικοινωνίας πελάτη-διακομιστή: μόνιμες συνδέσεις και διανομείς.

Μια σύνδεση αντιπροσωπεύει ένα απλό τελικό σημείο για την αποστολή ενός μεμονωμένου, ομαδοποιημένου ή ραδιοτηλεοπτικού μηνύματος. Το PersistentConnection API (που αντιπροσωπεύεται από την κλάση PersistentConnection στον κώδικα .NET) παρέχει στους προγραμματιστές άμεση πρόσβαση στο υποκείμενο πρωτόκολλο επικοινωνίας του SignalR. Οι προγραμματιστές που έχουν χρησιμοποιήσει API που βασίζονται σε σύνδεση, όπως το WCF, θα είναι πιο εξοικειωμένοι με το μοντέλο επικοινωνίας σύνδεσης.
Οι διανομείς είναι αγωγοί επικοινωνίας που βασίζονται σε API αλλά υψηλότερου επιπέδου που επιτρέπουν στους πελάτες και τους διακομιστές να καλούν μεθόδους απευθείας μεταξύ τους. Το SignalR κάνει θαυμάσια δουλειά στο χειρισμό του προγραμματισμού μεταξύ μηχανών, επιτρέποντας στους πελάτες να καλούν εύκολα μεθόδους στον διακομιστή σαν να καλούσαν τοπικές μεθόδους και αντίστροφα. Οι προγραμματιστές που έχουν χρησιμοποιήσει απομακρυσμένα AIP που βασίζονται σε κλήσεις, όπως το .Net Remoting, θα είναι πιο εξοικειωμένοι με το μοντέλο διανομέα. Χρησιμοποιώντας τον διανομέα, μπορείτε επίσης να μεταβιβάσετε παραμέτρους με έντονη πληκτρολόγηση σε μεθόδους και να τις συνδέσετε με το μοντέλο.

        Διάγραμμα αρχιτεκτονικής: Το παρακάτω διάγραμμα δείχνει τη σχέση μεταξύ του διανομέα, της συνεχούς σύνδεσης και της υποκείμενης τεχνολογίας που χρησιμοποιείται για τη μεταφορά.


9. Πώς λειτουργεί ο κόμβος:

Όταν ο κώδικας διακομιστή καλεί τον πελάτη, ο διακομιστής θα στείλει ένα πακέτο που περιέχει τη μέθοδο κλήσης και τις παραμέτρους (όταν το αντικείμενο χρησιμοποιείται ως παράμετρος μεθόδου, θα σειριοποιηθεί ως JSON για αποστολή) στον πελάτη. Στη συνέχεια, ο πελάτης ελέγχει το όνομα της μεθόδου που έλαβε και εκτελεί μια αναζήτηση αντιστοίχισης στη μέθοδο που ορίζεται από τον πελάτη και εάν η αντιστοίχιση είναι επιτυχής, η μέθοδος εκτελείται και το αποσειριοποιημένο αντικείμενο χρησιμοποιείται ως παράμετρος μεθόδου.
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το Fiddler για να παρακολουθείτε την εκτέλεση κλήσεων μεθόδου. Η παρακάτω εικόνα δείχνει μια μέθοδο που καταγράφηκε από τα αρχεία καταγραφής του Fiddler για αποστολή από τον διακομιστή SignalR στον πελάτη του προγράμματος περιήγησης web. Η μέθοδος που ξεκινά από το διανομέα ονομάζεται MoveShapeHub και η μέθοδος που ονομάζεται updateShape.


Σε αυτό το παράδειγμα, το όνομα του διανομέα προσδιορίζεται με την παράμετρο "H", το όνομα της μεθόδου προσδιορίζεται με την παράμετρο "M" και το αντικείμενο παραμέτρου που αποστέλλεται στη μέθοδο προσδιορίζεται με την παράμετρο "A". Η εφαρμογή που δημιούργησε το μήνυμα υλοποιήθηκε στο σεμινάριο επικοινωνίας υψηλής συχνότητας σε πραγματικό χρόνο.
Επιλέξτε ένα μοντέλο επικοινωνίας:
Οι περισσότερες εφαρμογές χρησιμοποιούν το API του διανομέα, το οποίο μπορεί να χρησιμοποιηθεί στις ακόλουθες περιπτώσεις:
Πρέπει να καθορίσετε τη μορφή με την οποία αποστέλλεται το μήνυμα.
Οι προγραμματιστές προτιμούν να χρησιμοποιούν ένα μοντέλο ανταλλαγής μηνυμάτων και προγραμματισμού παρά ένα μοντέλο απομακρυσμένης κλήσης
Το μοντέλο ανταλλαγής μηνυμάτων χρησιμοποιείται σε υπάρχουσες εφαρμογές και σχεδιάζεται να μεταφερθεί στο SignalR.






Προηγούμενος:.net/c# Οι πολυνηματικές συλλογές τροποποίησης θα είναι πρόβλημα;
Επόμενος:asp.net mvc4.0 Εγκατάσταση του SignalR (1)
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 27/8/2018 2:18:05 μ.μ. |
Επεξήγηση κοινών μεθόδων κόμβου


Clients.Caller: Μπορεί να επικοινωνήσει με τον καλούντα

Clients.Others: Επικοινωνεί με όλους τους υπολογιστές-πελάτες που είναι συνδεδεμένοι σε αυτόν τον διανομέα εκτός από εσάς

Clients.All: Μπορεί να επικοινωνήσει με όλους τους υπολογιστές-πελάτες που είναι συνδεδεμένοι σε αυτόν τον διανομέα

Clients.OthersInGroup: Μπορεί να επικοινωνήσει με άλλους υπολογιστές-πελάτες που είναι συνδεδεμένοι στο διανομέα εκτός από την καθορισμένη ομάδα

Clients.Client: Επικοινωνεί με υπολογιστές-πελάτες που καθορίζουν ένα ConnectionId

Clients.AllExcept: Μπορεί να επικοινωνήσει με όλους τους υπολογιστές-πελάτες που είναι συνδεδεμένοι σε αυτόν τον διανομέα εκτός από το καθορισμένο ConnectionId

Clients.Group: Επικοινωνεί με υπολογιστές-πελάτες σε μια καθορισμένη ομάδα

Clients.User:可以与指定的userId进行通信
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com