Programavimas

Kaip dirbti su „Web Sockets“ .Net

Tinklo lizdas yra TCP lizdo ryšys tarp kliento ir serverio per tinklą. Iš esmės interneto lizdas yra dvipusis visapusiškas ryšys tarp kliento ir serverio per tinklą. Didėjanti realiojo laiko paklausa, mažos delsos žinučių siuntimas žiniatinklyje ir mobiliosiose programose paskatino interneto lizdų atsiradimą. Tai yra protokolas, leidžiantis realiu laiku, greitai ir dvipusiu ryšiu palaikyti savo programas, o tai nereikalauja kompromisų dėl vartotojo patirties.

„WebSockets“ yra pranešimais pagrįstas protokolas, kuris naudojasi TCP srautiniu ryšiu. „System.Net.WebSockets“ vardų sritis palaiko darbą su .Net žiniatinklio lizdais. Atkreipkite dėmesį, kad žiniatinklio lizdo ryšys tarp serverio ir kliento programos užmegztas per HTTP mainus tarp jų.

MSDN teigia: "„ WebSockets “suteikia naršyklėms galimybę atidaryti dvikryptį, dvipusį komunikacijos kanalą su paslaugomis. Tuomet kiekviena pusė gali naudoti šį kanalą, kad nedelsdama išsiųstų duomenis kitam. Dabar svetainės iš socialinių tinklų ir žaidimų į finansines svetaines gali padėti geriau. realaus laiko scenarijus, geriausia naudojant tą patį žymėjimą skirtingose ​​naršyklėse. "

Daugiau apie „WebSocket“ protokolą galite sužinoti čia.

Darbas su „WebSockets“ .Net

Priglobdami savo tinklo lizdus serverio pusėje naudodami .Net, turite keletą pasirinkimų. „WebSocket“ serverį galite priglobti tradicinėse ASP.Net arba ASP.Net MVC programose. Norėdami tai padaryti, turėtumėte pasinaudoti „HttpContext.AcceptWebSocketRequest“ pranašumais. Tada kliento pusėje galite turėti interneto programą, kad galėtumėte prisijungti prie interneto lizdo ir bendrauti keisdamiesi pranešimais. Taip pat galite sukurti WCF paslaugą, naudojančią „netHttpBinding“, ir pasinaudoti „CallbackContract“ pranašumais savo paslaugoje. Tada galite pasinaudoti „HttpContext.AcceptWebSocketRequest“ pranašumais arba netgi pasinaudoti „WebSocketHandler“ ar „WebSocketHost“, esančiais „Microsoft.WebSockets.dll“ dalimi.

Kliento pusėje galite pasinaudoti HTML5 ir „jQuery“ pranašumais savo tinklalapyje. Taip pat galite pasinaudoti „ClientWebSocket“ klase, kad sukurtumėte kliento programą, arba netgi naudokite WCF klientą, kad prisijungtumėte prie interneto lizdo.

Atkreipkite dėmesį, kad dabar „HttpContext“ objekte (nuo .Net Framework 4.5) yra nauja ypatybė, vadinama „IsWebSocketRequest“. Galite pasinaudoti šia „HttpContext“ objekto ypatybe ir patikrinti, ar gaunama užklausa yra žiniatinklio lizdo užklausa. Šis kodų sąrašas parodo, kaip galite sukurti interneto lizdą naudodami „HttpHandler“.

viešosios klasės tarnyba: IHttpHandler

   {

public void „ProcessRequest“ („HttpContext“ kontekstas)

       {

jei (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

Kitas

context.Response.StatusCode = 400;

       }

viešoji „Bool“ yra daugkartinio naudojimo

       {

gauti

            {

grąžinti klaidingą;

           }

       }

privatus asinchroninis užduotis ProcessRequestInternal („AspNetWebSocketContext“ kontekstas)

       {

„WebSocket“ lizdas = kontekstas. „WebSocket“;

kol (tiesa)

           {

// Parašykite savo kodą čia, kad galėtumėte apdoroti užklausą

           }

       }

   }

„Http“ tvarkyklę turėtumėte užregistruoti savo programos faile web.config. Štai kodo fragmentas, parodantis, kaip turėtumėte tai padaryti.

  

    

type = "Web.Handler" />

  

Taip pat galite naudoti žiniatinklio lizdus savo žiniatinklio API valdikliuose. Beje, ASP.Net žiniatinklio API yra lengva sistema, naudojama kuriant RESTful paslaugas, kurios veikia HTTP. „RESTful“ paslaugos yra lengvos, be pilietybės, kliento-serverio pagrindu veikiančios, talpykloje saugomos paslaugos, pagrįstos išteklių koncepcija. Šis kodo fragmentas iliustruoja, kaip galite įdiegti žiniatinklio lizdą savo žiniatinklio API valdiklio metodu - atkreipkite dėmesį į „HttpContext.AcceptWebSocketRequest“ naudojimą norint priimti ir užmegzti ryšius.

viešosios klasės „WebSocketController“: „ApiController“

{

[HttpGet]

public HttpResponseMessage GetMessage ()

       {

jei (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

grąžinti naują HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

privatus asinchroninis užduotis ProcessRequestInternal („AspNetWebSocketContext“ kontekstas)

          {

// Parašykite savo kodą čia norėdami apdoroti užklausą

         }

}

Kliento pusėje turėsite prisijungti prie žiniatinklio lizdo nurodydami URI, naudojamą „WebSocket“ ryšio užklausai siųsti.

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

„/ Web / api / WebSocket“);

webSocket.onopen = function () {

$ ("# status"). tekstas ("Prisijungta ...");

               };

Taip pat galite pasinaudoti nauja „Microsoft.Web.WebSockets.WebSocketHandler“ klase, kad dabar įdiegtumėte žiniatinklio lizdus. Norėdami naudoti šią klasę, turėsite įdiegti „Microsoft.WebSockets“ paketą per „NuGet Package Manager“. Arba galite įdiegti tą patį paketą vykdydami šią komandą „NuGet Package Manager Console“.

„Microsoft.WebSockets“ diegimo paketas

Šis kodo fragmentas parodo, kaip galite išplėsti „WebSocketHandler“ klasę, kad sukurtumėte savo pasirinktinį tvarkytuvą.

viešosios klasės „WebSocketHandler“: „WebSocketHandler“

   {

privati ​​statinė „WebSocketCollection“ socketClients = nauja „WebSocketCollection“);

visuomenės nepaisymas negaliojantis „OnOpen“ ()

       {

socketClients.Add (tai);

socketClients.Broadcast ("Tai skirta visiems prijungtiems klientams ...");

this.Send ("Sveiki nuo:" + this.WebSocketContext.UserHostAddress);

       }

viešas nepaisymas negaliojančio „OnClose“ ()

       {

pagrindas. „OnClose“ ();

       }

viešas nepaisymas negaliojantis „OnError“ ()

       {

bazė.OnError ();

        }

   }

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