Javascript websocket: opis, načelo delovanja, uporaba

WebSocket (WS) je povezava med strežnikom in stranko, ki omogoča pridobivanje informacij s strani strežnika, ne da bi bilo treba najprej zahtevati odjemalčevo stranko, saj prejme tako imenovano obvestilo PUSH. Idealna shema interakcije JavaScript WebSocket bi imela eno nit na strani strežnika, ki obdeluje informacije, npr. posluša spremembe podatkovne zbirke ali dogodke, ki jih sprožijo drugi procesi, da bi lahko hkrati poslala informacije vsem odjemalcem brez uporabe virov. Odjemalec WebSocket v JS in HTML5 z uporabo vmesnika WS, ki ga zagotavlja večina sodobnih brskalnikov: IE 10+, Chrome 16+, Firefox 11+, Safari 6+.

Opredelitev spletnih vtičnic

Opredelitev spletnih vtičnic

Spletni vtiči so opredeljeni kot dvosmerna komunikacija med strežnikom in odjemalcem. Ključnega pomena za JavaScript WebSocket sta pravi vzporednost in optimizacija zmogljivosti, kar omogoča bolj odzivne in bogatejše spletne aplikacije.

Protokol od začetka vzpostavi popolnoma dvosmerno komunikacijo. WebSockets so korak naprej pri zagotavljanju namiznih funkcij v brskalnikih. Predstavljajo novo stopnjo v razvoju, ki je bil že dolgo pričakovan na področju internetne tehnologije odjemalec/strežnik.

Glavne značilnosti spletnih vtičnikov JavaScript so naslednje:

  1. Protokol je standardiziran, kar pomeni, da se lahko uporablja za vzpostavitev komunikacije v realnem času med spletnimi strežniki in odjemalci.
  2. Spletni vtičniki so se razvili v medplatformni standard za komunikacijo med odjemalcem in strežnikom v realnem času.
  3. Standard omogoča novo vrsto uporabe.
  4. S to tehnologijo lahko podjetja v realnem času pospešijo.

Največja prednost tehnologije JavaScript WebSocket je dvosmerna komunikacija (popolnoma dvostranska) prek ene same povezave TCP. HTTP ima svoj nabor shem, kot sta http in https. Podobna shema je opredeljena tudi v vzorcu URL protokola spletnih vtičnic. Najnovejša specifikacija protokola WS je opredeljena kot RFC 6455, predlagani standard. RFC 6455 podpirajo različni brskalniki, kot so Internet Explorer, Mozilla Firefox, Google Chrome.

Obojestranska komunikacija

Obojestranska komunikacija

Preden se lotimo potrebe po spletnih vtičnicah, si moramo ogledati obstoječe metode, ki se uporabljajo za dvostransko komunikacijo odjemalca Java WebSocket. Ti so naslednji:

  • glasovanje;
  • dolgotrajno anketiranje;
  • pretakanje;
  • postback in AJAX;
  • HTML5.

Obveščanje je mogoče opredeliti kot metodo, ki izvaja periodično obveščanje ne glede na podatke, ki so prisotni pri prenosu. Pošiljata se sinhronizirano. Odziv strežnika vključuje razpoložljive podatke ali nekatera opozorila.

Dolgotrajno anketiranje, kot pove že ime, vključuje podobno tehniko anketiranja. Odjemalec in strežnik ohranjata povezavo aktivno, dokler ne prejmeta nekaj podatkov ali dokler se ne izteče časovna omejitev. Če se povezava iz kakršnega koli razloga izgubi, lahko odjemalec Java WebSocket ponovno zažene postopek in pošlje naslednjo zahtevo. Dolgotrajno anketiranje je v primerjavi s postopkom anketiranja izboljšano, vendar lahko trajne zahteve upočasnijo postopek.

Možnosti pretakanja in AJAX

To velja za najboljšo možnost za prenos podatkov v realnem času. Strežnik ohrani odprto in aktivno povezavo z odjemalcem, dokler ne prejme potrebnih podatkov. V tem primeru se povezava šteje za odprto za nedoločen čas. Streaming vključuje glave HTTP, ki povečujejo velikost datoteke in zakasnitev. To se lahko šteje za veliko pomanjkljivost.

Gre za skrajšano obliko asinhronega Javascripta in XML. Objekt XmlHttpRequest omogoča izvajanje Javascripta brez ponovnega nalaganja celotne spletne strani. AJAX pošilja in sprejema le del spletne strani. Glavne pomanjkljivosti tehnologije AJAX v primerjavi s spletnimi vtičniki JavaScript so

  1. pošilja glave HTTP, kar poveča skupno velikost.
  2. Polodvojno komuniciranje.
  3. Spletni strežnik porabi več virov.

HTML5 je robustno ogrodje za razvoj in oblikovanje spletnih aplikacij. Glavni stebri so API za označevanje, CSS3 in Javascript.

Funkcionalnost

Funkcionalnost

WebSocket predstavlja pomembno nadgradnjo v zgodovini spletnega komuniciranja. Pred njegovim pojavom je vsa komunikacija med spletnimi odjemalci in strežniki temeljila le na protokolu HTTP. Spletni vtič pomaga pri dinamičnem pretoku povezav, ki so trajne in popolnoma dvosmerne. Polni dvosmerni prenos pomeni komunikacijo na obeh straneh z veliko hitrostjo. Zaradi učinkovitega premagovanja vseh pomanjkljivosti obstoječih protokolov ga imenujejo "game changer".

Pomen WS za razvijalce in arhitekte:

  1. Neodvisen protokol, ki temelji na protokolu TCP in je zasnovan za podporo kateremu koli drugemu protokolu, ki običajno deluje le na podlagi čiste povezave TCP.
  2. transportna plast, na kateri lahko deluje kateri koli drug protokol.

API Websocket podpira možnost opredelitve podprotokolov - protokolnih knjižnic, ki lahko interpretirajo določene vrste protokolov. Primeri takih protokolov so XMPP, STOMP in AMQP. Razvijalcem ni več treba razmišljati o vrsti povezave v smislu paradigme zahteve in odgovora HTTP.

Edina zahteva na strani brskalnika je zagon knjižnice JavaScript, ki lahko interpretira WS handshake ter vzpostavi in vzdržuje povezavo. Na strani strežnika je industrijski standard uporaba obstoječih protokolnih knjižnic, ki delujejo nad protokolom TCP in uporabljajo prehod.

Funkcionalnost WebSocket:

  1. Povezave prek WebSocket se začnejo prek protokola HTTP.
  2. Strežniki HTTP navadno razumejo WS handshake kot zahtevo za posodobitev.
  3. Spletni vtičniki so lahko razširitev obstoječega okolja HTTP in zagotavljajo potrebno infrastrukturo za dodajanje spletnih funkcionalnosti. Temeljijo na naprednejših popolnoma dvosmernih protokolih, ki omogočajo prenos podatkov v obe smeri med odjemalcem JavaScript WebSocket in strežnikom.

Implementacija odjemalca v jeziku JavaScript

Izvorna koda datoteke JavaScript z imenom wsclient.js vključuje HTML5 v stran, da lahko odpre povezavo WebSocket. Skripta vsebuje kodo za ustvarjanje odjemalca WS z uporabo njegovega vmesnika.

Preprosta stran HTML5 se uporablja za ustvarjanje obrazca za povezavo s končno točko strežnika in izmenjavo sporočil. Stran HTML uporablja wsclient.js za zagon datoteke HTML odprite v brskalniku, npr. Google Chrome, tako da izberete "Datoteka" -> zavihek "Odprto".

Enostaven strežnik je mogoče enostavno implementirati v Javi. Preprosto vrne sporočilo, prejeto od odjemalca, v velikih črkah:

  1. Odprite obrazec wsclient.html v spletnem brskalniku in vnesite zahtevane parametre za povezavo WebSocket, nato pa pritisnite gumb "Connect". Če je bila povezava uspešno vzpostavljena, bo gumb onemogočen, omogočen pa bo gumb "Disable".
  2. V polje "Besedilo sporočila" vnesite sporočilo in pritisnite gumb "Pošlji". Strežnik ga bo prikazal z velikimi črkami, odjemalec JavaScript pa ga bo prikazal v območju za besedilo.
  3. "Orodja za razvijalce" Google Chrome je dobro orodje za spoznavanje povezav WebSocket. V oknu "Orodja za razvijalce" kliknite na zavihek "Omrežje" in izberite WS, da si ogledate seznam vseh posnetkov za trenutno stran.
  4. Kliknite zavihek Header, da si ogledate vrednosti zahtevka in odgovora.
  5. V zavihku Okviri so navedena vsa odhodna in dohodna sporočila. Prvo sporočilo je tisto, ki ga je odjemalec poslal strežniku, drugo sporočilo pa je odmev strežnika z velikimi črkami.
  6. V zavihku Časovni razpored je prikazano, kako dolgo je bila odprta povezava.
  7. konzola se uporablja za ogled trenutnega primerka WS, ki se nahaja V obsegu strani HTML.
  8. Vnesite ime spremenljivke JavaScript WebSocket, WS in konzola bo izpisala predstavitev JSON predmeta.
  9. Stanje pripravljenosti. Lastnost objekta prikazuje stanje povezave. Vrednost 1 pomeni, da je odprt in pripravljen za sprejemanje in pošiljanje sporočil. Uporablja se lahko preveriti WS povezavo pred poskusom prenosa podatkov. Če je povezava zaprta, je mogoče uporabiti logiko za njeno samodejno ponovno vzpostavitev.
  10. Wireshark je zelo obsežno in uporabno orodje za spremljanje omrežnega prometa. Brezplačno ga lahko prenesete z uradnega spletnega mesta. Po namestitvi ga zaženite in izberite omrežni vmesnik za zajem prometa.
  11. Če si želite ogledati samo promet WS, v polje za filtriranje vnesite websocket. Kliknite na okvir, da si ogledate vsebino, vključno z dejanskim koristnim bremenom sporočila. Pomaknite se navzdol do vozlišča z besedilnimi podatki v vrstici in ga razširite.
  12. Z desno tipko miške kliknite stisnjen tovor in izberite "Prikaži bajte paketa". V pogovornem oknu izberite "Compressed" s spustnega seznama "Decode", če želite prikazati koristni tovor kot navadno besedilo.

Konfiguracija Java WebSocket spring

Konfiguracija Java WebSocket spring

Spring-boot-starter-websocket - zagotavlja uporabne privzete vrednosti za WS. Najprej nastavite posrednika sporočil STOMP. V njem WebSocketConfig.Java definira končno točko posrednika sporočil STOMP in končno točko aplikacije websocket.@Configuration - konfiguracijski razred pomladi.

EnableWebSocketMessageBroker - omogoči obdelavo sporočil, ki jo podpira posrednik sporočil. Pri tem se kot posrednik sporočil uporablja STOMP.

Metoda ConfigureMessageBroker () omogoča preprostemu posredniku, ki temelji na pomnilniku, da odjemalcu posreduje sporočila s predponama "/topic" in "/queue". Označuje tudi predpono "/app" za tiste, ki so povezani z razveljavljenimi metodami preslikave @Message v razredu kontrolerja. Ta predpona se bo uporabljala za opredelitev vseh preslikav sporočil. Na primer, "/app/message" je končna točka, za katero je preslikana metoda WebSocket Controller.processMessage Od odjemalca ().

Podobno funkcija RegisterStompEndpoints () omogoči podporo STOMP in registrira končne točke stomp v "/app. V tem primeru bodo vsa sporočila spletnega vtičnika JavaScript usmerjena prek protokola STOMP, ki končni točki spletnega vtičnika dodaja dodatno varnostno plast. Pri ustvarjanju povezave WS iz javascripta uporabite samo to posebno končno točko Stomp.

V spodnji konfiguraciji je treba za omogočanje podpore za SockJs, ki zagotavlja neobvezno povratno dejanje, izvesti naslednje spremembe.addEndpoint () .withSockJS ().

Prednost uporabe sockJS je v tem, da se ob prekinitvi ali nezmožnosti vzpostavitve povezave prek spletnega vtiča ta prenese na HTTP in komunikacija med odjemalcem in strežnikom se lahko še vedno nadaljuje.

Konfiguracija Java WebSocket spring

Ravnanje z napakami

Ko je med odjemalcem in strežnikom vzpostavljena povezava, se v primeru WS sproži dogodek Open. Napake, ki se pojavijo med komunikacijo, se ustvarijo. To je opredeljeno z dogodkom OnError. Če pride do napake, se povezava vedno prekine.

OnError - dogodek se sproži, ko gre med komunikacijo kaj narobe. Napaki dogodka sledi prekinitev povezave. Priporočljivo je, da uporabnika vedno obvestite o nepričakovanih napakah in poskusite ponovno vzpostaviti povezavo.

Pri obravnavi napak je treba upoštevati notranje in zunanje parametre:

  1. Notranji parametri vključujejo napake, ki lahko nastanejo zaradi napak v kodi ali nepričakovanega vedenja uporabnika.
  2. Zunanje napake niso povezane z aplikacijo, temveč s parametri, ki jih ni mogoče nadzorovati. Najpomembnejša med njimi je omrežna povezljivost.
  3. Vsaka interaktivna dvosmerna spletna aplikacija zahteva aktivno internetno povezavo.

Preverjanje razpoložljivosti omrežja

V današnjih namiznih in mobilnih aplikacijah je pogosto treba preveriti, ali je omrežje na voljo. Najpogostejši način za spletno vtičnico php JavaScript je izvajanje zahtevka HTTP na spletno mesto, ki ga je treba aktivirati, npr. google.com. Če je zahteva uspešna, namizna ali mobilna naprava sporoči, da obstaja aktivna povezava. Podobno ima HTML zahtevo XMLHttpRequest, s katero ugotovi, ali je splet dosegljiv.

HTML5 pa je ta postopek še poenostavil in uvedel način preverjanja, ali lahko brskalnik sprejema spletne odgovore. To dosežemo z uporabo navigatorja predmetov.

Preverjanje spletne razpoložljivosti

Brez povezave pomeni, da naprava ni povezana ali da je uporabnik v orodni vrstici brskalnika izbral način brez povezave.

Testiranje Java WebSocket uporablja preprost odjemalec WS. Ko je povezava vzpostavljena, pošlje podatke strežniku in izpiše prejeti odgovor: import websocket.

Preizkus Java WebSocket

Dogodki OnOpen, OnClose in OnMessage

Strežnik WebSocket je preprost program, ki lahko obravnava dogodke in dejanja WS. Običajno zagotavlja metode, podobne metodam odjemalčevega vmesnika API. Hkrati je večina programski jeziki zagotoviti izvajanje komunikacije med strežnikom in odjemalcem WebSocket ter poudariti sprožene dogodke in dejanja.

Strežnik WebSocket deluje enako kot odjemalec. Odziva se na dogodke in po potrebi ukrepa. Ne glede na programski jezik, ki ga uporabljate, vsak strežnik WebSocket izvaja posebne postopke. Inicializira se na naslovu spletne vtičnice, obravnava dogodke OnOpen, OnClose in OnMessage ter pošilja sporočila odjemalcem. Obstajajo štirje glavni dogodki API Websocket:

  • odkrito;
  • sporočilo;
  • zaprto;
  • napaka.

Vsak od teh dogodkov se obravnava z izvajanjem funkcij, kot so OnOpen, OnMessage , OnClose in OnError. To lahko izvedete tudi z metodo addEventListener.

Instanca WebSocket v javi

Vsak strežnik WS potrebuje veljavnega gostitelja in vrata. Primer ustvarjanja primerka Websocket v strežniku: var server = new WebSocketServer("ws://localhost:8181").

S specifikacijo vrat, ki še ni bila uporabljena, lahko uporabite kateri koli veljavni naslov URL. Zelo koristno je voditi evidenco o povezanih odjemalcih, saj zbira in shranjuje različne podatke ali pošilja različna sporočila vsakemu od njih.

Fleck predstavlja dohodne povezave (odjemalce) vmesniku IwebSocketConnection. Kadar koli se nekdo poveže ali odklopi iz storitve, se lahko ustvari ali posodobi prazen seznam: var clients = new List ().

Nato se pokliče metoda Start in počaka, da se odjemalci povežejo. Strežnik lahko sprejema dohodne povezave, ko se začne. V sistemu Fleck potrebuje metoda Start parameter, ki določa vtičnico, ki je sprožila dogodek: server.Start(vtičnica) =>{});

Za implementacijo strežnika WebSocket v jeziku C# morate uporabiti zunanjo knjižnico. Če želite doseči enak rezultat v Javi, izkoristite tehnologijo, ki je vključena v standardno knjižnico s paketom javax.Websocket, začenši z Java EE 7.

Ustvarite projekt odjemalca Java WebSocket, ki temelji na Java EE 7, z uporabo enega od brezplačnih spletnih IDE, kot sta Eclipse in NetBeans. V programu NetBeans ustvarite novo spletno aplikacijo in kot strežnik uporabite GlassFish (različica 4.0). Če uporabnik raje uporablja Eclipse, mora izbrati Tomcat 8. Določite paket, ki se lahko imenuje MyServer, in v njem ustvarite razred WebSocket Server. Koda za izvajanje strežnika je precej berljiva in njegovo obnašanje lahko razumljiv.

Primer spletnih vtičnic v Javi

Prednosti tehnologije WebSocket

WS rešuje nekaj težav z REST ali HTTP. HTTP je enosmerni protokol, pri katerem odjemalec vedno sproži zahtevo. Strežnik obdela in vrne odgovor, nato pa ga odjemalec uporabi. Websocket je dvosmerni protokol, ki nima vnaprej določenih vzorcev sporočil, kot so zahteva/odgovor. Odjemalec ali strežnik lahko pošlje sporočilo drugi stranki.

HTTP omogoča, da se sporočilo z zahtevo pošlje od odjemalca do strežnika, nato pa strežnik pošlje odgovor. V določenem trenutku odjemalec komunicira s strežnikom ali obratno. Za zahtevo HTTP se običajno vzpostavi nova povezava TCP, ki se nato prekine Po prejemu odziv. Za drugo zahtevo/odgovor HTTP je treba vzpostaviti novo povezavo TCP.

Za WS se povezava HTTP posodobi s standardnim mehanizmom za posodabljanje. Odjemalec in strežnik izmenjujeta podatke prek iste povezave TCP v življenjskem ciklu povezave WS.

Websocket je protokol nizke ravni. Vse, vključno s preprostim vzorcem zahteve/odgovora, ustvarjanjem, posodabljanjem in brisanjem zahtevanih virov ter kodami stanja. Vse so skrbno opredeljene za HTTP.

WS je državni protokol, medtem ko HTTP ni državni protokol.

Povezave WS se lahko na posameznem strežniku razširjajo navpično, medtem ko se povezave HTTP lahko razširjajo vodoravno. Obstaja več lastniških rešitev za vodoravno skaliranje, ki pa ne temeljijo na standardih.

HTTP ima številne druge prednosti, kot so predpomnjenje, usmerjanje in multipleksiranje. Vse to je treba opredeliti na podlagi WebSocket in podatkovne zbirke Java.

Članki na tem področju