Cara bekerja dengan Soket Web di .Net

Soket web adalah koneksi soket TCP antara klien dan server melalui jaringan. Pada dasarnya, soket web adalah komunikasi dupleks penuh dua arah antara klien dan server melalui jaringan. Meningkatnya permintaan untuk pengiriman pesan waktu nyata dan latensi rendah untuk web, aplikasi seluler sama-sama telah menyebabkan munculnya soket web. Ini adalah protokol yang memungkinkan Anda untuk menyediakan komunikasi dua arah secara real time, cepat, tanpa perlu mengorbankan pengalaman pengguna.

WebSockets adalah protokol berbasis pesan yang memanfaatkan koneksi streaming TCP. Namespace System.Net.WebSockets menyediakan dukungan untuk bekerja dengan soket web di .Net. Perhatikan bahwa koneksi soket web antara server dan aplikasi klien dibuat melalui pertukaran jabat tangan HTTP di antara mereka.

MSDN menyatakan: "WebSockets memungkinkan browser untuk membuka saluran komunikasi dua arah, dupleks penuh dengan layanan. Masing-masing pihak kemudian dapat menggunakan saluran ini untuk segera mengirim data ke yang lain. Sekarang, situs dari jejaring sosial dan game ke situs keuangan dapat memberikan layanan yang lebih baik skenario waktu nyata, idealnya menggunakan markup yang sama di browser yang berbeda. "

Anda dapat mempelajari lebih lanjut tentang protokol WebSocket di sini.

Bekerja dengan WebSockets di .Net

Saat menghosting soket web Anda di sisi server menggunakan .Net, Anda memiliki beberapa pilihan. Anda dapat meng-host server WebSocket di aplikasi ASP.Net atau ASP.Net MVC tradisional. Untuk melakukan ini, Anda perlu memanfaatkan HttpContext.AcceptWebSocketRequest. Anda kemudian dapat memiliki aplikasi web di sisi klien untuk terhubung ke soket web dan berkomunikasi untuk pertukaran pesan. Anda juga dapat membuat layanan WCF yang menggunakan netHttpBinding dan memanfaatkan CallbackContract dalam layanan Anda. Anda kemudian dapat memanfaatkan HttpContext.AcceptWebSocketRequest atau bahkan memanfaatkan WebSocketHandler atau WebSocketHost yang tersedia sebagai bagian dari Microsoft.WebSockets.dll.

Di sisi klien, Anda dapat memanfaatkan HTML5 dan jQuery di halaman web Anda. Anda juga dapat memanfaatkan kelas ClientWebSocket untuk membuat aplikasi klien atau bahkan menggunakan klien WCF untuk terhubung ke soket web.

Perhatikan bahwa objek HttpContext sekarang (sejak .Net Framework 4.5) berisi properti baru yang disebut IsWebSocketRequest. Anda dapat memanfaatkan properti objek HttpContext ini untuk memeriksa apakah permintaan yang masuk adalah permintaan soket web. Daftar kode berikut menunjukkan bagaimana Anda dapat membuat soket web menggunakan 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

           }

       }

   }

Anda harus mendaftarkan penangan Http di file web.config aplikasi Anda. Berikut potongan kode yang menunjukkan bagaimana Anda harus melakukan ini.

  

    

           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();

        }

   }