Javascript websocket: opis, princip rada, aplikacija

WebSockets (WS) – odnos između servera i klijenta za primanje informacija sa servera bez potrebe da prvo zatražite klijentski dio, primajući takozvano PUSH obavještenje. Idealna šema JavaScript WebSocket interakcije Izgleda kao da postoji jedna nit u serverskom dijelu koja obrađuje informacije, na primjer, sluša promjene baze podataka ili događaje izazvane drugim procesima, da istovremeno šalje informacije svim klijentima bez korištenja resursa. WebSocket klijent u JS i HTML5 koristeći ws interfejs obezbeđuje većina modernih pretraživača: IE 10+, Chrome 16+, Firefox 11+, Safari 6+.

Definicija WebSockets-a

Definicija WebSockets-a

Web utičnice se definišu kao dvosmerna komunikacija između servera i klijenta. Ključne tačke JavaScript WebSocket-a su prava istovremenost i optimizacija performansi, što dovodi do odgovornijih i bogatijih web aplikacija.

Protokol uspostavlja full-duplex komunikaciju od nule. Web utičnice su korak naprijed u pružanju funkcionalnosti radne površine u pregledačima. Oni demonstriraju novu fazu evolucije koja se dugo očekivala u klijentskoj/serverskoj Internet tehnologiji.

Glavne karakteristike JavaScript WebSocket-a su sljedeće:

  1. Protokol je standardizovan, što znači da je moguće organizovati komunikaciju između web servera i klijenata u realnom vremenu.
  2. Web utičnice postaju višeplatformski standard za komunikaciju u realnom vremenu između klijenta i servera.
  3. Standard dozvoljava novu vrstu aplikacije.
  4. Sa ovom tehnologijom, preduzeća u realnom vremenu mogu ubrzati svoj rad.

Najveća prednost JavaScript WebSocket-a je dvosmjerna komunikacija (full duplex) preko jedne TCP veze. HTTP ima svoj skup šema, kao što su http i https. Protokol Web Socket takođe ima sličnu šemu definisanu u svom URL šablonu. Najnovija specifikacija ws protokola je definisana kao RFC 6455 - predloženi standard. RFC 6455 podržavaju različiti pretraživači, kao što su Internet Explorer, Mozilla Firefox, Google Chrome.

Duplex komunikacija

Duplex komunikacija

Prije nego što prijeđete na potrebu korištenja web utičnica, potrebno je pogledati postojeće metode koje se koriste za duplex komunikacijski klijent Java WebSocket. Oni su sljedeći:

  • glasanje;
  • dugo istraživanje;
  • streaming;
  • postback i AJAX;
  • HTML5.

Anketiranje se može definisati kao metoda koja vrši periodične upite bez obzira na podatke koji postoje u prenosu. Šalju se sinhrono. Odgovor servera uključuje dostupne podatke ili neka upozorenja.

Dugo istraživanje, kao što ime govori, uključuje sličnu tehniku istraživanja. Klijent i server održavaju vezu aktivnom dok neki podaci ne budu primljeni ili istekne vremensko ograničenje. Ako se veza izgubi iz bilo kog razloga, Java WebSocket klijent može ponovo pokrenuti proceduru i izvršiti sekvencijalni zahtev. Dugo ispitivanje nije ništa drugo do poboljšanje performansi tokom procesa glasanja, ali stalni upiti mogu usporiti proces.

Opcije za Streaming i AJAX

Ovo se smatra najboljom opcijom za prijenos podataka u realnom vremenu. Server održava vezu otvorenom i aktivnom sa klijentom dok se ne dobiju potrebni podaci. U ovom slučaju, veza se smatra otvorenom na neodređeno vrijeme. Streaming uključuje HTTP zaglavlja koja povećavaju veličinu datoteke i latenciju. Ovo se može smatrati glavnim nedostatkom.

Ovo je skraćeni oblik asinhronog JavaScripta i XML-a. Objekat XMLHttpRequest vam omogućava da izvršite Javascript bez ponovnog učitavanja cijele web stranice. AJAX šalje i prima samo deo web stranice. Glavni nedostaci Ajaxa u poređenju sa JavaScript websockets-om su:

  1. Pošaljite HTTP zaglavlja, što povećava ukupnu veličinu.
  2. Polu-dupleks komunikacija.
  3. Web server troši više resursa.

HTML5 je pouzdan okvir za razvoj i dizajn web aplikacija. Glavni stubovi su markup API, CSS3 i Javascript.

Funkcija

Funkcija

WebSocket predstavlja veliko ažuriranje u istoriji web komunikacija. Prije svog postojanja, sve komunikacije između web klijenata i servera su samo na osnovu HTTP. Web Socket pomaže u dinamičkom toku veza koje su trajne full-duplex. Full duplex se odnosi na komunikaciju sa oba kraja sa značajnom velikom brzinom. Ovo se zove menjač igre zbog njegovog efikasnog prevazilaženja svih nedostataka postojećih protokola.

Važnost WS-a za programere i arhitekte:

  1. Nezavisni protokol zasnovan na TCP-u, dizajniran da podrži bilo koji drugi protokol koji tradicionalno radi samo na vrhu čiste TCP veze.
  2. Transportni sloj na čijem vrhu može raditi bilo koji drugi protokol.

API Websocket podržava mogućnost definisanja podprotokola-biblioteka protokola koje mogu tumačiti određene vrste protokola. Primjeri takvih protokola uključuju XMPP, STOMP i AMQP. Programeri više ne moraju razmišljati o vrsti veze sa tačke gledišta http paradigme "zahtjev-odgovor.

, jedini uslov na strani pretraživača je pokretanje JavaScript biblioteke koja može tumačiti ws stisak ruke, uspostaviti i održavati vezu. Na strani servera, industrijski standard je korištenje postojećih biblioteka protokola koje rade na vrhu TCP-a i koriste gateway.

Funkcija web utičnica:

  1. WebSocket veze se pokreću putem HTTP-a.
  2. HTTP serveri obično tumače ws rukovanje kao zahtjev za ažuriranje.
  3. Web utičnice mogu biti dodatak postojećem HTTP okruženju i mogu pružiti potrebnu infrastrukturu za dodavanje web funkcionalnosti. Oni se oslanjaju na naprednije full-duplex protokole koji omogućavaju prenos podataka u oba smjera između klijenta JavaScript WebSocket klijenta i servera.

Implementacija klijenata u JavaScript-u

Izvorni kod JavaScript datoteke pod nazivom wsclient.js je uključen u HTML5 stranicu tako da može otvoriti WebSocket vezu. Skripta sadrži kod za kreiranje ws klijenta koristeći njegov interfejs.

Jednostavna HTML5 stranica se koristi za kreiranje obrasca za povezivanje sa krajnjom tačkom servera i razmjenu poruka. HTML stranica koristi wsclient.js script za pokretanje HTML datoteke otvorite je u pregledniku, na primjer, u Google Chromeu, odabirom "datoteka" -> "Open".

Jednostavan server se lako može implementirati u Javi. Samo vraća poruku primljenu od klijenta velikim slovima:

  1. Otvorite wsclient obrazac.html u web pretraživaču i unesite potrebne parametre WebSocket veze, a zatim kliknite na "Poveži". dugme ako je veza uspešno uspostavljena, dugme će biti onemogućeno, a dugme "Prekini vezu" će biti omogućeno.
  2. Oni voze poruku u polju "Tekst poruke" i kliknite na "Pošalji". dugme, server će ga prikazati velikim slovima, a JavaScript klijent će ga prikazati u oblasti za tekst.
  3. "Alati Za Programere" Google Chrome je dobar alat za istraživanje WebSocket veza. U prozoru "Alati Za Programere" idi na karticu "Mreža" i odaberite WS da vidite listu svih veza za trenutnu stranicu.
  4. Kliknite na karticu "zaglavlje" da vidite vrijednosti zahtjeva i odgovora.
  5. Kartica okviri navodi sve odlazne i dolazne poruke. Prva poruka je ono što je poslano od klijenta na server, a druga poruka je server echo velikim slovima.
  6. Kartica s tajmingom pokazuje koliko dugo je veza otvorena.
  7. Konzole se koriste za gledanje trenutne instance WS-a, šta je u okviru HTML stranice.
  8. Unesite naziv WebSocket JavaScript varijable, WS, i konzola će ispisati JSON prikaz objekta.
  9. ReadyState. Svojstvo objekta prikazuje status veze. Vrijednost 1 znači da je otvorena i spremna za primanje i slanje poruka. Može se koristiti za provjeru ws veza prije pokušaja prijenosa podataka. Ako je veza zatvorena, logika njenog automatskog ponovnog povezivanja može se implementirati.
  10. Wireshark je veoma sveobuhvatan i koristan alat za praćenje mrežnog saobraćaja. Može se besplatno preuzeti sa zvanične web stranice. Nakon instalacije, pokrenite ga i odaberite mrežni interfejs za snimanje saobraćaja.
  11. Za pregled samo ws prometa unesite websocket u polje filter. Kliknite na okvir da vidite sadržaj, uključujući stvarnu korisnost poruke. Pomaknite se prema dolje do čvora za tekstualne podatke zasnovanog na liniji i proširite ga.
  12. Desnom tipkom miša kliknite komprimirani teret i odaberite "Prikaži bajtove paketa". U dijaloškom okviru odaberite "komprimirano" sa padajuće liste" dekodiranje " da vidite korisnost u običnom tekstu.

Konfiguriranje Java WebSocket spring

Konfiguriranje Java WebSocket spring

Spring-Boot-starter-websocket-pruža korisne zadane vrijednosti za WS. Prije svega, konfigurirajte STOMP brokera poruka. U it WebSocketConfig.Java definira krajnju tačku brokera poruka STOMP i krajnju tačku aplikacije websocket.@Konfiguracija-klasa konfiguracije opruge.

EnableWebSocketMessageBroker-omogućava obradu poruka koju podržava broker. Ovdje koriste STOMP kao brokera poruka.

Metoda ConfigureMessageBroker () omogućava jednostavnom posredniku zasnovanom na memoriji da šalje poruke klijentu po destinacijama sa prefiksima " / topic "I"/queue". Takođe označava prefiks" / app " za one koji su povezani sa nevažećim metodama mapiranja @poruka u klasi kontrolera. Ovaj prefiks će se koristiti za identifikaciju svih Prikaza poruka. Na primjer, "/ app/ message " je krajnja tačka za koju WebSocket kontroler.ProcessMessage From Client () metoda je mapirana.

. Slično tome, RegisterStompEndpoints () omogućava podršku STOMP - U i registruje stomp krajnje tačke u "/ pozdrav". Istovremeno, sve JavaScript web socket poruke će biti usmerene preko STOMP-a, što takođe dodaje dodatni sloj sigurnosti na krajnju tačku web socket-a. Prilikom kreiranja WS veze iz JavaScripta koristi se samo ova specifična krajnja tačka Stomp.

U donjoj konfiguraciji, da biste omogućili podršku SockJS-a za pružanje opcione obrnute radnje, moraju se izvršiti sljedeće promjene: registry.addEndpoint ("/pozdrav") .withSockJS ().

Prednost korišćenja SockJS-a je da kad god je veza sa web socketom prekinuta ili se ne može uspostaviti, onda će biti degradirana na HTTP i komunikacija između klijenta i servera se i dalje može nastaviti.

Konfiguriranje Java WebSocket spring

Rukovanje Greškama

Čim se uspostavi veza između klijenta i servera, otvoreni događaj se pokreće iz ws instance. Generišu se greške koje se dešavaju tokom komunikacije. Ovo se određuje pomoću onerror događaja. Pojavu greške uvek prati prekid veze.

onError — događaj se zove kada nešto krene po zlu između komunikacija. Nakon greške događaja slijedi prekid veze. Preporučuje se da uvek obavestite korisnika o neočekivanim greškama i pokušate da ponovo povežete vezu.

Kada je u pitanju upravljanje greškama, morate uzeti u obzir i unutrašnje i eksterne parametre:

  1. Interni parametri uključuju greške koje se mogu generisati usled grešaka u kodu ili neočekivanog ponašanja korisnika.
  2. Eksterne greške nemaju nikakve veze sa aplikacijom, već su povezane sa parametrima koji se ne mogu kontrolisati. Najvažnija od njih je mrežna konekcija.
  3. Svaka interaktivna dvosmjerna web aplikacija zahtijeva aktivnu internet vezu.

Provjera dostupnosti mreže

U savremenim desktop i mobilnim aplikacijama, zajednički zadatak je provjera dostupnosti mreže. Najčešći način za WebSocket php JavaScript je da podnese HTTP zahtev veb lokaciji koja treba da se aktivira, na primer, google.com. Ako je zahtjev uspješan, desktop ili mobilni uređaj prijavljuju da postoji aktivna veza. Slično tome, HTML ima XMLHttpRequest za određivanje dostupnosti mreže.

HTML5 je takođe olakšao ovaj proces i uveo način da proveri da li pretraživač može prihvatiti web odgovore. Ovo se postiže pomoću navigatora objekata.

Provjera dostupnosti mreže

Offline način rada znači da ili uređaj nije povezan, ili je korisnik odabrao offline način rada na traci sa alatkama pretraživača.

Testiranje Java WebSocket koristi jednostavan ws-klijent. Čim se veza uspostavi, oni šalju podatke na server i štampaju primljeni odgovor: uvezi websocket.

Za testiranje Java WebSocket-a

onootvoreni, onClose i onMessage događaji

WebSocket Server je jednostavan program koji može da se nosi sa ws događajima i akcijama. Obično pruža metode slične klijentskom API-ju. U isto vrijeme , većina programski jezici obezbijediti implementaciju komunikacije između WebSocket servera i klijenta, naglašavajući inicirane događaje i radnje.

WebSocket server radi slično kao i klijenti. Reaguje na događaje i, ako je potrebno, vrši radnje. Bez obzira na programski jezik koji se koristi, svaki WebSocket server obavlja određene procedure. Inicijalizira se na adresi web utičnice, rukuje događajima onOpen, onClose i onMessage, a također šalje poruke klijentima. Postoje četiri glavna WebSocket API događaja:

  • otvori;
  • poruka;
  • zatvoreno;
  • greška.

Svaki od događaja se obrađuje implementacijom funkcija kao što su onOpen, onMessage, onClose i onError, respektivno. Ovo se takođe može implementirati metodom addEventListener.

Instanca Web utičnica u Javi

Svaki ws server zahtijeva važeći host i port. Primjer kreiranja WebSocket instance na serveru: var server = novi WebSocketServer("ws://localhost: 8181").

Svaki važeći URL se može koristiti sa specifikacijom porta koja nije ranije korištena. Veoma je korisno voditi evidenciju povezanih klijenata, jer akumulira i čuva različite podatke ili šalje različite poruke svakom od njih.

Fleck predstavlja dolazne veze (klijente) sa iwebsocketconnection interfejsom. Kad god neko povezuje ili prekida vezu sa servisom, možete kreirati ili ažurirati prazan popis: gdje klijenti = nova lista ().

Nakon toga zovu metodu Start i čekaju da se klijenti povežu. Nakon pokretanja, server može prihvatiti dolazne veze. U Fleck-u, Start metodi je potreban parametar koji specificira utičnicu koja je pokrenula događaje: server.Početak (utičnica) =>{});

Da biste implementirali WebSocket server u C#, morate koristiti vanjsku biblioteku. Da biste dobili isti rezultat u Javi, koriste se prednosti tehnologije uključene u standardnu biblioteku pomoću javax paketa.websocket, počevši od Java EE 7.

Kreirajte Java WebSocket klijentski projekat zasnovan na Java EE 7 Koristeći jedno od besplatnih online IDE okruženja, na primjer, Eclipse i NetBeans. NetBeans kreira novu web aplikaciju i nužno koristi GlassFish kao server (verzija 4.0). Ako korisnik više voli da koristi Eclipse, moraće da izabere Tomcat 8. Dakle, oni definišu paket koji se može nazvati MyServer i kreiraju klasu WebSocket Servera unutar njega. Kod za implementaciju servera je prilično čitljiv i njegovo ponašanje lako je za razumjeti.

Instanca Web utičnica u Javi

Prednosti web utičnice

WS rješava nekoliko problema sa REST ili HTTP. HTTP je jednosmerni protokol u kojem klijent uvek pokreće zahtev. Server obrađuje i vraća odgovor, a zatim ga klijent koristi. Websocket je dvosmjerni protokol koji nema unaprijed definirane obrasce poruka kao što su zahtjev/odgovor. Ili klijent ili server mogu poslati poruku drugoj strani.

HTTP dozvoljava poruci zahtjeva da ide sa klijenta na server, a zatim šalje odgovor. U određenom trenutku klijent komunicira sa serverom ili obrnuto. Obično se pokreće nova TCP veza za HTTP zahtjev i prekida nakon prijema odgovor. Nova TCP veza mora biti uspostavljena za drugi HTTP zahtjev/odgovor.

Za WS, HTTP veza se ažurira pomoću standardnog mehanizma za ažuriranje. Klijent i server razmjenjuju podatke preko iste TCP veze unutar životnog ciklusa WS veze.

Websocket je protokol niskog nivoa. Sve, uključujući jednostavan obrazac zahtjeva/odgovora, načine za kreiranje, ažuriranje, brisanje potrebnih resursa i statusnih kodova. Svi su pažljivo definirani za HTTP.

WS je protokol za državu, dok je HTTP protokol bez državljanstva.

Scale scale WS veze vertikalno na jednom serveru, dok HTTP može skalirati horizontalno. Postoji nekoliko patentiranih rješenja za horizontalno skaliranje, ali se ne zasnivaju na standardima.

HTTP dolazi sa mnogim drugim pogodnostima kao što su keširanje, rutiranje i multipleksiranje. Sve ovo treba definisati na vrhu WebSocket i Java baze podataka.