Προγραμματισμός

Πώς να εργαστείτε με Web Sockets στο .Net

Η υποδοχή Ιστού είναι μια σύνδεση υποδοχής TCP μεταξύ του πελάτη και του διακομιστή μέσω δικτύου. Ουσιαστικά, μια πρίζα ιστού είναι μια αμφίδρομη πλήρης αμφίδρομη επικοινωνία μεταξύ του πελάτη και του διακομιστή μέσω ενός δικτύου. Η αυξανόμενη ζήτηση για πραγματικό χρόνο, μηνυμάτων χαμηλού λανθάνοντος χρόνου για web, εφαρμογές για κινητές συσκευές οδήγησε στην εμφάνιση διαδικτυακών υποδοχών. Αυτό είναι ένα πρωτόκολλο που σας δίνει τη δυνατότητα να παρέχετε σε πραγματικό χρόνο, γρήγορη, αμφίδρομη επικοινωνία στις εφαρμογές σας, χωρίς να χρειάζεται συμβιβασμός στην εμπειρία του χρήστη.

Το WebSockets είναι ένα πρωτόκολλο βασισμένο σε μηνύματα που εκμεταλλεύεται μια σύνδεση ροής TCP. Ο χώρος ονομάτων System.Net.WebSockets παρέχει υποστήριξη για εργασία με πρίζες στο .Net. Σημειώστε ότι δημιουργείται μια σύνδεση πρίζας μεταξύ διακομιστή και εφαρμογής πελάτη μέσω ανταλλαγής χειραψιών HTTP μεταξύ τους.

Το MSDN δηλώνει: "Τα WebSockets επιτρέπουν στα προγράμματα περιήγησης να ανοίγουν ένα αμφίδρομο, πλήρως αμφίδρομο κανάλι επικοινωνίας με υπηρεσίες. Κάθε πλευρά μπορεί στη συνέχεια να χρησιμοποιήσει αυτό το κανάλι για να στείλει αμέσως δεδομένα στην άλλη. Τώρα, ιστότοποι από κοινωνική δικτύωση και παιχνίδια σε οικονομικούς ιστότοπους μπορούν να προσφέρουν καλύτερα σενάρια σε πραγματικό χρόνο, ιδανικά χρησιμοποιώντας την ίδια σήμανση σε διαφορετικά προγράμματα περιήγησης. "

Μπορείτε να μάθετε περισσότερα για το πρωτόκολλο WebSocket εδώ.

Εργασία με WebSockets στο .Net

Όταν φιλοξενείτε τις πρίζες σας στο διακομιστή χρησιμοποιώντας το .Net, έχετε μερικές επιλογές. Μπορείτε να φιλοξενήσετε έναν διακομιστή WebSocket σε παραδοσιακές εφαρμογές ASP.Net ή ASP.Net MVC. Για να το κάνετε αυτό, θα πρέπει να επωφεληθείτε από το HttpContext.AcceptWebSocketRequest. Στη συνέχεια, μπορείτε να έχετε μια διαδικτυακή εφαρμογή από την πλευρά του πελάτη για να συνδεθείτε στην πρίζα και να επικοινωνήσετε για ανταλλαγή μηνυμάτων. Μπορείτε επίσης να δημιουργήσετε μια υπηρεσία WCF που χρησιμοποιεί netHttpBinding και να επωφεληθείτε από το CallbackContract στην υπηρεσία σας. Στη συνέχεια, μπορείτε να επωφεληθείτε από το HttpContext.AcceptWebSocketRequest ή ακόμη και να αξιοποιήσετε το WebSocketHandler ή το WebSocketHost που διατίθεται ως μέρος του Microsoft.WebSockets.dll.

Από την πλευρά του πελάτη, μπορείτε να επωφεληθείτε από το HTML5 και το jQuery στην ιστοσελίδα σας. Μπορείτε επίσης να αξιοποιήσετε την κλάση ClientWebSocket για να δημιουργήσετε μια εφαρμογή πελάτη ή ακόμα και να χρησιμοποιήσετε ένα πρόγραμμα-πελάτη WCF για να συνδεθείτε στην υποδοχή web.

Σημειώστε ότι το αντικείμενο HttpContext τώρα (από το .Net Framework 4.5) περιέχει μια νέα ιδιότητα που ονομάζεται IsWebSocketRequest. Μπορείτε να επωφεληθείτε από αυτήν την ιδιότητα του αντικειμένου HttpContext για να ελέγξετε αν ένα εισερχόμενο αίτημα είναι ένα αίτημα υποδοχής ιστού. Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να δημιουργήσετε μια πρίζα web χρησιμοποιώντας το HttpHandler.

δημόσια τάξη Υπηρεσία: IHttpHandler

   {

public void ProcessRequest (περιβάλλον HttpContext)

       {

εάν (konteks.IsWebSocketRequest)

konteks.AcceptWebSocketRequest (ProcessRequestInternal);

αλλού

konteks.Response.StatusCode = 400;

       }

δημόσια bool IsReusable

       {

παίρνω

            {

επιστροφή ψευδής?

           }

       }

private async Task ProcessRequestInternal (περιβάλλον AspNetWebSocketContext)

       {

Υποδοχή WebSocket = πλαίσιο. WebSocket;

ενώ (αληθινό)

           {

// Γράψτε τον κωδικό σας εδώ για να επεξεργαστείτε το αίτημα

           }

       }

   }

Πρέπει να καταχωρίσετε το πρόγραμμα χειρισμού Http στο αρχείο web.config της εφαρμογής σας. Ακολουθεί το απόσπασμα κώδικα που δείχνει πώς πρέπει να το κάνετε αυτό.

  

    

type = "Web.Handler" />

  

Μπορείτε επίσης να χρησιμοποιήσετε πρίζες Ιστού στους ελεγκτές API Ιστού σας. Παρεμπιπτόντως, το ASP.Net Web API είναι ένα ελαφρύ πλαίσιο που χρησιμοποιείται για τη δημιουργία υπηρεσιών RESTful που εκτελούνται σε HTTP. Οι υπηρεσίες RESTful είναι ελαφριές, απάτριδες, βασισμένες στον πελάτη-διακομιστή, κρυφές μνήμες υπηρεσίες που βασίζονται στην έννοια των πόρων. Το ακόλουθο απόσπασμα κώδικα δείχνει πώς μπορείτε να εφαρμόσετε μια υποδοχή web στη μέθοδο ελεγκτή API Ιστού σας - σημειώστε τη χρήση του HttpContext.AcceptWebSocketRequest για αποδοχή και δημιουργία συνδέσεων.

δημόσια τάξη WebSocketController: ApiController

{

[HttpGet]

δημόσιο HttpResponseMessage GetMessage ()

       {

εάν (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

επιστρέψτε το νέο HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

private async Task ProcessRequestInternal (περιβάλλον AspNetWebSocketContext)

          {

// Γράψτε τον κωδικό σας εδώ για να επεξεργαστείτε το αίτημα

         }

}

Από την πλευρά του πελάτη, θα πρέπει να συνδεθείτε στην υποδοχή web καθορίζοντας το URI που χρησιμοποιείται για την αποστολή του αιτήματος σύνδεσης WebSocket.

var webSocket = νέο WebSocket ("ws: //" + window.location.hostname +

"/ Web / api / WebSocket");

webSocket.onopen = συνάρτηση () {

$ ("# status"). κείμενο ("Συνδεδεμένο ...");

               };

Μπορείτε επίσης να επωφεληθείτε από τη νέα κλάση Microsoft.Web.WebSockets.WebSocketHandler για να εφαρμόσετε πρίζες τώρα. Για να χρησιμοποιήσετε αυτήν την τάξη, θα πρέπει να εγκαταστήσετε το πακέτο Microsoft.WebSockets μέσω του NuGet Package Manager. Εναλλακτικά, μπορείτε να εγκαταστήσετε το ίδιο πακέτο εκτελώντας την ακόλουθη εντολή στο NuGet Package Manager Console.

Εγκατάσταση-πακέτου Microsoft.WebSockets

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να επεκτείνετε την κλάση WebSocketHandler για να δημιουργήσετε το δικό σας προσαρμοσμένο πρόγραμμα χειρισμού.

δημόσια τάξη WebSocketHandler: WebSocketHandler

   {

ιδιωτικό στατικό WebSocketCollection socketClients = νέο WebSocketCollection ();

δημόσια παράκαμψη άκυρο OnOpen ()

       {

socketClients.Προσθήκη (αυτό);

socketClients.Broadcast ("Αυτό είναι για όλους τους συνδεδεμένους πελάτες ...");

αυτό. Αποστολή ("Γεια από:" + this.WebSocketContext.UserHostAddress);

       }

δημόσια παράκαμψη κενού OnClose ()

       {

base.OnClose ();

       }

δημόσια παράκαμψη void OnError ()

       {

base.OnError ();

        }

   }

$config[zx-auto] not found$config[zx-overlay] not found