כיצד לעבוד עם שקעי רשת ב- .Net

שקע אינטרנט הוא חיבור שקע TCP בין הלקוח לשרת ברשת. בעיקרו של דבר, שקע אינטרנט הוא תקשורת דו-צדדית מלאה דו כיוונית בין הלקוח לשרת ברשת. הביקוש הגובר לזמן אמת, העברת הודעות בהשהיה נמוכה לאינטרנט, יישומים ניידים כאחד הביא להופעתם של שקעי רשת. זהו פרוטוקול המאפשר לך לספק בזמן אמת, תקשורת דו כיוונית מהירה ביישומים שלך, ללא הצורך להתפשר על חוויית המשתמש.

WebSockets הוא פרוטוקול מבוסס הודעות המנצל חיבור זרם TCP. מרחב השמות System.Net.WebSockets מספק תמיכה בעבודה עם שקעי רשת ב- .Net. שים לב שחיבור שקע אינטרנט בין שרת ליישום לקוח נוצר באמצעות חילופי לחיצות ידיים HTTP ביניהם.

ה- MSDN קובע: "WebSockets מאפשרים לדפדפנים לפתוח ערוץ תקשורת דו-כיווני מלא דו-כיווני עם שירותים. כל צד יכול להשתמש בערוץ זה כדי לשלוח נתונים מיד לאחר. כעת, אתרים מרשתות חברתיות ומשחקים לאתרים פיננסיים יכולים לספק טוב יותר. תרחישים בזמן אמת, באופן אידיאלי באמצעות סימון זהה בדפדפנים שונים. "

תוכל ללמוד עוד על פרוטוקול WebSocket כאן.

עבודה עם WebSockets ב- .Net

כאשר אתה מארח את שקעי האינטרנט שלך בצד השרת באמצעות .Net, יש לך כמה אפשרויות. אתה יכול לארח שרת WebSocket ביישומי MVC מסורתיים של ASP.Net או ASP.Net. לשם כך יהיה עליכם לנצל את HttpContext.AcceptWebSocketRequest. לאחר מכן תוכל לקבל יישום אינטרנט בצד הלקוח כדי להתחבר לשקע האינטרנט ולתקשר לצורך החלפת מסרים. אתה יכול גם ליצור שירות WCF המשתמש ב- netHttpBinding ולנצל חוזה להתקשרות חוזרת בשירות שלך. לאחר מכן תוכל לנצל את HttpContext.AcceptWebSocketRequest או אפילו למנף את WebSocketHandler או WebSocketHost הזמינים כחלק מ- Microsoft.WebSockets.dll.

בצד הלקוח תוכל לנצל את HTML5 ו- jQuery בדף האינטרנט שלך. אתה יכול גם למנף את מחלקת ClientWebSocket ליצירת יישום לקוח או אפילו להשתמש בלקוח WCF כדי להתחבר לשקע האינטרנט.

שים לב שהאובייקט HttpContext כעת (מאז. Net Framework 4.5) מכיל מאפיין חדש בשם IsWebSocketRequest. אתה יכול לנצל את המאפיין הזה של האובייקט HttpContext כדי לבדוק אם בקשה נכנסת היא בקשת שקע אינטרנט. רישום הקוד הבא מראה כיצד ניתן ליצור שקע אינטרנט באמצעות HttpHandler.

public class Service : IHttpHandler

   {

       public void ProcessRequest(HttpContext context)

       {

           if (context.IsWebSocketRequest)

               context.AcceptWebSocketRequest(ProcessRequestInternal);

           else

               context.Response.StatusCode = 400;

       }

       public bool IsReusable

       {

           get

            {

               return false;

           }

       }

       private async Task ProcessRequestInternal(AspNetWebSocketContext context)

       {

           WebSocket socket = context.WebSocket;

             while(true)

           {

               //Write your code here to process the request

           }

       }

   }

עליך לרשום את מטפל ה- Http בקובץ web.config של היישום שלך. הנה קטע הקוד המדגים כיצד עליכם לעשות זאת.

  

    

           type="Web.Handler"/>

  

You can also use web sockets in your Web API controllers. Incidentally, ASP.Net Web API is a lightweight framework used for building RESTful services that run on HTTP. RESTful services are light-weight, stateless, client-server based, cacheable services that are based on the concept of resources. The following code snippet illustrates how you can implement a web socket in your Web API controller method -- note the usage of HttpContext.AcceptWebSocketRequest to accept and establish connections.

public class WebSocketController : ApiController

{

       [HttpGet]

       public HttpResponseMessage GetMessage()

       {

           if (HttpContext.Current.IsWebSocketRequest)

           {

               HttpContext.Current.AcceptWebSocketRequest(ProcessRequestInternal);

           }

           return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);

       }

          private async Task ProcessRequestInternal(AspNetWebSocketContext context)

          {

          //Write your code here to process the request

         }

}

At the client side, you would need to connect to the web socket by specifying the URI used to send the WebSocket connection request.

var webSocket = new WebSocket("ws://" + window.location.hostname +

                   "/Web/api/WebSocket");

                   webSocket.onopen = function () {

                   $("#status").text("Connected...");

               };

You can also take advantage of the new Microsoft.Web.WebSockets.WebSocketHandler class to implement web sockets now. To use this class, you would need to install the Microsoft.WebSockets package via NuGet Package Manager. Alternatively, you can install the same package by running the following command in the NuGet Package Manager Console.

Install-Package Microsoft.WebSockets

The following code snippet shows how you can extend the WebSocketHandler class to create your own custom handler.

public class WebSocketHandler : WebSocketHandler

   {

       private static WebSocketCollection socketClients = new WebSocketCollection();

       public override void OnOpen()

       {

           socketClients.Add(this);

           socketClients.Broadcast("This is for all connected clients...");

           this.Send("Hello from: " + this.WebSocketContext.UserHostAddress);

       }

       public override void OnClose()

       {

           base.OnClose();

       }

       public override void OnError()

       {

           base.OnError();

        }

   }