Programiranje

Kako delati s spletnimi vtičnicami v .Net

Spletna vtičnica je povezava vtičnice TCP med odjemalcem in strežnikom prek omrežja. V bistvu je spletna vtičnica dvosmerna full duplex komunikacija med odjemalcem in strežnikom prek omrežja. Naraščajoče povpraševanje po sporočilu v realnem času, nizka zakasnitev po spletnih mobilnih aplikacijah je povzročilo pojav spletnih vtičnic. To je protokol, ki vam omogoča, da v svojih aplikacijah omogočite hitro, dvosmerno komunikacijo v realnem času, ne da bi morali ogrožati uporabniško izkušnjo.

WebSockets je protokol, ki temelji na sporočilih in izkorišča prednost pretočne povezave TCP. Imenski prostor System.Net.WebSockets nudi podporo za delo s spletnimi vtičnicami v .Net. Upoštevajte, da se povezava s spletnimi vtičnicami med strežnikom in odjemalsko aplikacijo vzpostavi z izmenjavo rokovanja HTTP med njimi.

MSDN pravi: "WebSockets brskalnikom omogočajo, da odprejo dvosmerni, polni dupleks komunikacijski kanal s storitvami. Vsaka stran lahko nato uporabi ta kanal za takojšnjo pošiljanje podatkov drugi. Zdaj lahko spletna mesta iz družabnih omrežij in iger na finančna spletna mesta zagotavljajo boljše rezultate scenarije v realnem času, v idealnem primeru z uporabo istega označevanja v različnih brskalnikih. "

Več o protokolu WebSocket lahko izveste tukaj.

Delo z WebSockets v .Net

Ko gostite svoje spletne vtičnice na strani strežnika s pomočjo .Net, imate na voljo nekaj možnosti. Strežnik WebSocket lahko gostite v tradicionalnih aplikacijah ASP.Net ali ASP.Net MVC. Če želite to narediti, morate izkoristiti HttpContext.AcceptWebSocketRequest. Nato lahko na strani odjemalca imate spletno aplikacijo za povezavo s spletno vtičnico in komunikacijo za izmenjavo sporočil. Lahko tudi ustvarite storitev WCF, ki uporablja netHttpBinding in izkoristite CallbackContract v svoji storitvi. Nato lahko izkoristite HttpContext.AcceptWebSocketRequest ali celo izkoristite WebSocketHandler ali WebSocketHost, ki sta na voljo kot del Microsoft.WebSockets.dll.

Na strani odjemalca lahko na svoji spletni strani izkoristite prednosti HTML5 in jQuery. Razred ClientWebSocket lahko uporabite tudi za ustvarjanje odjemalske aplikacije ali celo uporabite odjemalca WCF za povezavo s spletno vtičnico.

Upoštevajte, da objekt HttpContext zdaj (od .Net Framework 4.5) vsebuje novo lastnost, imenovano IsWebSocketRequest. To lastnost objekta HttpContext lahko izkoristite, da preverite, ali je dohodna zahteva zahteva spletne vtičnice. Naslednji seznam kod prikazuje, kako lahko s pomočjo HttpHandlerja ustvarite spletno vtičnico.

storitev javnega razreda: IHttpHandler

   {

javna void ProcessRequest (kontekst HttpContext)

       {

če (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

drugače

context.Response.StatusCode = 400;

       }

javni bool IsReusable

       {

dobili

            {

vrni false;

           }

       }

zasebno asinhrono opravilo ProcessRequestInternal (kontekst AspNetWebSocketContext)

       {

WebSocket vtičnica = context.WebSocket;

medtem ko (res)

           {

// Tukaj napišite kodo za obdelavo zahteve

           }

       }

   }

Upravljalec Http bi morali registrirati v datoteki web.config vaše aplikacije. Tu je delček kode, ki prikazuje, kako to storiti.

  

    

type = "Web.Handler" />

  

Spletne vtičnice lahko uporabite tudi v krmilnikih spletnega API-ja. Mimogrede, spletni API ASP.Net je lahek okvir, ki se uporablja za izdelavo storitev RESTful, ki se izvajajo na HTTP. Storitve RESTful so lahke, predpomnilniške storitve na osnovi odjemalčevega strežnika brez državljanstva, ki temeljijo na konceptu virov. Naslednji delček kode prikazuje, kako lahko v način krmilnika spletnega API-ja implementirate spletno vtičnico - upoštevajte uporabo HttpContext.AcceptWebSocketRequest za sprejemanje in vzpostavljanje povezav.

javni razred WebSocketController: ApiController

{

[HttpGet]

public HttpResponseMessage GetMessage ()

       {

če (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

vrni novo HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

zasebno asinhrono opravilo ProcessRequestInternal (kontekst AspNetWebSocketContext)

          {

// Tukaj napišite kodo za obdelavo zahteve

         }

}

Na strani odjemalca se boste morali povezati s spletno vtičnico, tako da določite URI, ki se uporablja za pošiljanje zahteve za povezavo WebSocket.

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

"/ Web / api / WebSocket");

webSocket.onopen = function () {

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

               };

Izkoristite lahko tudi nov razred Microsoft.Web.WebSockets.WebSocketHandler, da lahko zdaj implementirate spletne vtičnice. Če želite uporabiti ta razred, morate namestiti paket Microsoft.WebSockets prek upravitelja paketov NuGet. Lahko pa namestite isti paket tako, da v konzoli NuGet Package Manager zaženete naslednji ukaz.

Install-Package Microsoft.WebSockets

Naslednji delček kode prikazuje, kako lahko razširite razred WebSocketHandler, da ustvarite lasten upravljalnik po meri.

javni razred WebSocketHandler: WebSocketHandler

   {

zasebni statični WebSocketCollection socketClients = novo WebSocketCollection ();

javno preglasitev void OnOpen ()

       {

socketClients.Add (this);

socketClients.Broadcast ("To je za vse povezane odjemalce ...");

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

       }

javno razveljavitev void OnClose ()

       {

base.OnClose ();

       }

javno preglasitev void OnError ()

       {

base.OnError ();

        }

   }

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