Javascript websocket: popis, pracovní princip, aplikace

WebSockets – WS) - propojení serveru a Klienta za účelem získání informací ze strany serveru, aniž byste museli předem požadovat klientskou část a dostávat tzv. Ideální schéma interakce JavaScript WebSocket vypadá, že v backendu existuje jedno vlákno, které zpracovává informace, například poslouchá změny DB nebo události spuštěné jinými procesy, aby odesílalo informace všem klientům současně bez použití zdrojů. Klient WebSocket v JS a HTML5 pomocí rozhraní WS poskytuje většina moderních prohlížečů: IE 10+, Chrome 16+, Firefox 11+, Safari 6+.

Definice WebSockets

Definice WebSockets

Webové zásuvky jsou definovány jako obousměrná komunikace mezi serverem a klientem. Klíčovými body JavaScriptu WebSocket jsou skutečná souběžnost a optimalizace výkonu, což vede k citlivějším a bohatším webovým aplikacím.

Protokol nastavuje plně duplexní komunikaci od nuly. Webové zásuvky jsou krokem vpřed v poskytování funkčnosti stolních počítačů v prohlížečích. Ukazují novou fázi vývoje, která se dlouho očekávala v internetové technologii klient / server.

Hlavní rysy JavaScriptu WebSocket jsou následující:

  1. Protokol je standardizován, což znamená schopnost organizovat komunikaci mezi webovými servery a klienty v reálném čase.
  2. Webové zásuvky se stávají standardem napříč platformami pro komunikaci v reálném čase mezi klientem a serverem.
  3. Standard umožňuje nový druh aplikací.
  4. Díky této technologii mohou podniky v reálném čase urychlit věci.

Největší výhodou JavaScriptu WebSocket je obousměrná komunikace (plný duplex) přes jedno připojení TCP. HTTP má vlastní sadu schémat, jako je http a https. Protokol web socket má také podobné schéma definované v jeho šabloně URL. Nejnovější specifikace protokolu WS je definována jako RFC 6455-navrhovaný standard. RFC 6455 je podporován různými prohlížeči, jako je Internet Explorer, Mozilla Firefox, Google Chrome.

Duplexní komunikace

Duplexní komunikace

Před přechodem na potřebu webových soketů je třeba se podívat na existující metody, které se používají pro duplexní komunikaci Client Java WebSocket. Jsou následující:

  • hlasování;
  • dlouhý průzkum;
  • streaming;
  • postback a AJAX;
  • HTML5.

Průzkum lze definovat jako metodu, která provádí periodické dotazy nezávisle na datech existujících v přenosu. Jsou odesílány synchronně. Odpověď serveru obsahuje dostupná data nebo některá varování.

Dlouhý průzkum, jak název napovídá, zahrnuje podobnou techniku dotazování. Klient a server udržují připojení aktivní, dokud nebudou přijata některá data nebo vyprší časový limit. Pokud je spojení z nějakého důvodu ztraceno, může klient Java WebSocket zahájit proceduru znovu a provést sériový dotaz. Dlouhý průzkum není nic jiného než zlepšení výkonu ve srovnání s procesem dotazování, ale neustálé dotazy mohou proces zpomalit.

Možnosti streamování a AJAX

To je považováno za nejlepší možnost pro přenos dat v reálném čase. Server udržuje připojení otevřené a aktivní s klientem, dokud nejsou získána potřebná data. V tomto případě je připojení považováno za otevřené na dobu neurčitou. Streamování zahrnuje záhlaví HTTP, která zvyšují velikost souboru a latenci. To lze považovat za hlavní nevýhodu.

Toto je zkrácená forma asynchronního JavaScriptu a XML. Objekt XmlHttpRequest umožňuje Javascript bez opětovného načtení celé webové stránky. AJAX odesílá a přijímá pouze část webové stránky. Hlavní nevýhody Ajaxu ve srovnání s WebSockets JavaScript jsou:

  1. Odesílejte záhlaví HTTP, což zvyšuje celkovou velikost.
  2. Komunikace poloduplexní.
  3. Webový server spotřebovává více zdrojů.

HTML5 je robustní rámec pro vývoj a návrh webových aplikací. Hlavními pilíři jsou značkovací API, CSS3 a Javascript.

Funkce

Funkce

WebSocket představuje významnou aktualizaci v historii webové komunikace. Před jeho existencí byla veškerá komunikace mezi webovými klienty a servery založena pouze na HTTP. Web Socket pomáhá v dynamickém toku připojení, které jsou konstantní plně duplexní. Kompletní Duplex odkazuje na spojení na obou koncích se značnou rychlou rychlostí. Tomu se říká změna hry kvůli jejímu účinnému překonání všech nedostatků stávajících protokolů.

Význam WS pro vývojáře a architekty:

  1. Nezávislý protokol založený na TCP je navržen tak, aby podporoval jakýkoli jiný protokol, který tradičně funguje pouze na čistém připojení TCP.
  2. Transportní vrstva, na které může běžet jakýkoli jiný protokol.

Websocket API podporuje schopnost definovat subprotocols-knihovny protokolů, které mohou interpretovat jejich konkrétní typy. Příklady takových protokolů zahrnují XMPP, STOMP a AMQP. Vývojáři již nemusí přemýšlet o typu připojení, pokud jde o paradigma HTTP "request-response".

Jediným požadavkem na straně prohlížeče je spuštění knihovny JavaScript, která dokáže interpretovat ws handshake, navázat a udržovat připojení. Na straně serveru je průmyslovým standardem použití existujících knihoven protokolů, které běží na vrcholu TCP a používají bránu.

Funkce webových soketů:

  1. Připojení přes WebSocket jsou iniciována přes HTTP.
  2. Servery HTTP obvykle interpretují ws handshake jako požadavek na aktualizaci.
  3. Webové zásuvky mohou být doplňkem stávajícího prostředí HTTP a mohou poskytnout potřebnou infrastrukturu pro přidání webových funkcí. Spoléhají se na pokročilejší plně duplexní protokoly, které umožňují přenos dat v obou směrech mezi klientem Client JavaScript WebSocket a serverem.

Implementace klienta v JavaScriptu

Zdrojový kód JavaScript souboru s názvem wsclient.js patří na stránku HTML5, aby mohl otevřít připojení WebSocket. Skript obsahuje kód pro vytvoření klienta WS pomocí jeho rozhraní.

Jednoduchá stránka HTML5 se používá k vytvoření formuláře pro připojení k koncovému bodu serveru a zasílání zpráv. Stránka HTML používá wsclient.JS skript pro spuštění souboru HTML, otevřete jej v prohlížeči, například v prohlížeči Google Chrome, výběrem"Soubor" -> «Otevřít».

Jednoduchý server lze snadno implementovat v Javě. Jednoduše vrátí zprávu přijatou od klienta velkými písmeny:

  1. Otevřete formulář wsclient.html ve webovém prohlížeči a zadejte požadované možnosti připojení WebSocket a poté klikněte na tlačítko "Připojit". Pokud bylo připojení úspěšné, tlačítko bude deaktivováno a tlačítko" Odpojit " bude povoleno.
  2. Vezměte zprávu do pole "Text zprávy" a klikněte na tlačítko"Odeslat". Server jej zobrazí velkými písmeny a klient JavaScript se zobrazí v textové oblasti.
  3. "Vývojářské nástroje" Google Chrome jsou dobrým nástrojem pro učení připojení WebSocket. V nabídce "Vývojářské nástroje" přejděte na kartu "Síť" a vyberte WS pro zobrazení seznamu všech připojení pro aktuální stránku.
  4. Kliknutím na kartu Záhlaví zobrazíte hodnoty požadavku a odpovědi.
  5. Karta rámečky Obsahuje seznam všech odchozích a příchozích zpráv. První zpráva je ta, která byla odeslána z klienta na server, a druhá zpráva je ozvěna serveru velkými písmeny.
  6. Timing karta ukazuje, jak dlouho bylo připojení otevřeno.
  7. Konzoly se používají k pohledu na aktuální instanci WS, co se nachází v rozsahu HTML stránky.
  8. Zadejte název proměnné WebSocket JavaScript, WS a konzola vytiskne reprezentaci objektu JSON.
  9. ReadyState. Vlastnost objektu zobrazuje stav připojení. Hodnota 1 znamená, že je otevřená a je připravena přijímat a odesílat zprávy. Lze jej použít pro ověření připojení WS před pokusem o přenos dat. Pokud je připojení uzavřeno, může být implementována logika jeho opětovného automatického připojení.
  10. Wireshark je velmi komplexní a užitečný nástroj pro monitorování provozu v síti. Lze jej zdarma stáhnout z oficiálních webových stránek. Po instalaci jej spusťte a vyberte síťové rozhraní pro zachycení provozu.
  11. Chcete-li zobrazit pouze provoz WS, zadejte websocket do pole filtru. Kliknutím na rámeček zobrazíte obsah včetně skutečného užitečného zatížení zprávy. Přejděte dolů na Line-based text data uzlu a rozbalte jej.
  12. Klikněte pravým tlačítkem na komprimované užitečné zatížení a vyberte "Zobrazit bajty paketu". V dialogovém okně vyberte "komprimovaný" v rozevíracím seznamu "dekódovat" a zobrazte užitečné zatížení prostým textem.

Nastavení Java WebSocket spring

Nastavení Java WebSocket spring

Spring-boot-starter-websocket-poskytuje užitečné výchozí hodnoty pro WS. Nejprve nakonfigurujte zprostředkovatele zpráv STOMP. Má WebSocketConfig.Java definuje koncový bod Stomp zprostředkovatele zpráv a koncový bod aplikace websocket.@Configuration-jarní konfigurační třída.

EnableWebSocketMessageBroker-zahrnuje zpracování zpráv podporované makléřem. Zde se používá STOMP jako zprostředkovatel zpráv.

Metoda ConfigureMessageBroker () umožňuje jednoduchému zprostředkovateli založenému na paměti předávat zprávy klientovi podle adresátů s předponami "/ topic " a "/ queue". Označuje také předponu "/app" pro ty spojené se zrušenými metodami mapování zpráv @ve třídě řadiče. Tato předpona bude použita k určení všech zobrazení zpráv. Například"/app / message " je koncový bod, pro který je mapována metoda WebSocket Controller.processMessage From Client ().

Podobně RegisterStompEndpoints () zahrnuje podporu STOMP a zaznamenává koncové body stomp do "/pozdravu". Tímto způsobem budou všechny zprávy webové zásuvky JavaScript směrovány přes STOMP, což také přidává další vrstvu zabezpečení do koncového bodu webové zásuvky. Při vytváření připojení WS z JavaScriptu používají pouze tento konkrétní koncový bod Stomp.

V níže uvedené konfiguraci je třeba provést následující změny, abyste povolili podporu SockJs pro poskytnutí volitelné zpětné akce: registry.addEndpoint ("/pozdrav") .withSockJS ().

Výhodou používání sockJS zde je, že kdykoli je připojení webové zásuvky zakázáno nebo nelze navázat, pak bude sníženo na HTTP a komunikace mezi klientem a serverem může stále pokračovat.

Nastavení Java WebSocket spring

Zpracování chyb

Jakmile je navázáno spojení mezi klientem a serverem, spustí se z instance ws událost Open. Chyby, ke kterým dochází během komunikace, jsou generovány. To je definováno pomocí události OnError. Výskyt chyby je vždy doprovázen přerušením připojení.

Onerror-událost je vyvolána, když se něco mezi komunikací neděje. Po chybě události následuje ukončení připojení. Doporučuje se vždy informovat uživatele o neočekávaných chybách a pokusit se znovu připojit připojení.

Pokud jde o zpracování chyb, je třeba zvážit interní i externí parametry:

  1. Interní parametry zahrnují chyby, které lze generovat kvůli chybám v kódu nebo neočekávanému chování uživatele.
  2. Externí chyby nemají s aplikací nic společného, spíše souvisejí s možnostmi, které nelze spravovat. Nejdůležitější je připojení k síti.
  3. Jakákoli interaktivní obousměrná webová aplikace vyžaduje aktivní připojení k internetu.

Kontrola dostupnosti sítě

V moderních desktopových a mobilních aplikacích je běžným úkolem zkontrolovat dostupnost sítě. Nejběžnější způsob pro WebSocket php JavaScript-spusťte požadavek HTTP na web, který má být aktivován, například google.com. Pokud je dotaz úspěšný, stolní nebo mobilní zařízení říká, že existuje aktivní připojení. Podobně v HTML existuje XMLHttpRequest k určení dostupnosti sítě.

HTML5 stejný dělal tento proces ještě jednodušší, a představil způsob, jak zkontrolovat, zda prohlížeč může přijímat webové odpovědi. Toho je dosaženo pomocí navigátoru objektu.

Kontrola dostupnosti sítě

Režim offline znamená, že buď není zařízení připojeno, nebo si uživatel vybral Režim offline na panelu nástrojů prohlížeče.

Testing Java WebSocket používá jednoduchý ws-client. Jakmile je připojení navázáno, odešlete data na server a vytiskněte přijatou odpověď: import websocket.

Pro testing Java WebSocket

Události OnOpen, OnClose a OnMessage

Server WebSocket je jednoduchý program, který zvládne události a akce WS. Obvykle poskytuje podobné metody jako rozhraní API klienta. Zároveň většina programovací jazyk poskytují implementaci komunikace mezi serverem a klientem WebSocket zvýrazněním iniciovaných událostí a akcí.

Server WebSocket funguje podobně jako klienti. Reaguje na události a v případě potřeby provádí akce. Bez ohledu na použitý programovací jazyk provádí každý server WebSocket určité postupy. Inicializuje se na adresu webové zásuvky, zpracovává události OnOpen, OnClose a OnMessage a odesílá zprávy klientům. Existují čtyři hlavní události Websocket API:

  • je otevřeno;
  • zpráva;
  • zavřeno;
  • chyba.

Každá z událostí je zpracována implementací funkcí, jako jsou OnOpen, OnMessage, OnClose a OnError. To lze také implementovat pomocí metody addEventListener.

Instance webových soketů v Javě

Každý server WS vyžaduje platného hostitele a Port. Příklad vytvoření instance Websocket na serveru: var server = new WebSocketServer ("ws://localhost:8181").

Jakoukoli platnou adresu URL lze použít se specifikací portu, která nebyla dříve použita. Je velmi užitečné vést záznamy o připojených klientech, protože hromadí a ukládá různá data nebo každému z nich odesílá různé zprávy.

Fleck představuje příchozí připojení (klienty) s rozhraním iwebsocketconnection. Kdykoli se někdo připojí nebo odpojí od služby, je možné vytvořit nebo aktualizovat prázdný seznam: var clients = new List ().

Poté vyvolejte metodu Start a počkejte na připojení klientů. Po spuštění může Server přijímat příchozí připojení. Ve Flecku metoda Start potřebuje parametr, který určuje soket, který způsobil události: server.Start(socket) =>{});

Chcete-li implementovat server WebSocket v C#, musíte použít externí knihovnu. Pro dosažení stejného výsledku v Javě jsou využity technologie obsažené ve standardní knihovně pomocí balíčku javax.websocket počínaje Java EE 7.

Vytvořte projekt Java WebSocket client založený na Java EE 7 pomocí jednoho z bezplatných online IDE, jako jsou Eclipse a NetBeans. The NetBeans vytvořit novou webovou aplikaci a určitě použít GlassFish jako server (verze 4.0). Pokud uživatel dává přednost použití Eclipse, bude muset vybrat Tomcat 8. Definujte tedy balíček, který lze nazvat MyServer, a uvnitř něj vytvořte třídu WebSocket Server. Kód pro implementaci serveru je docela čitelný a jeho chování snadno pochopit.

Instance webových soketů v Javě

Výhody webové zásuvky

WS řeší několik problémů s REST nebo HTTP. HTTP je jednosměrný protokol, kde klient vždy iniciuje požadavek. Server zpracovává a vrací odpověď a poté ji klient použije. Websocket je obousměrný protokol, který neobsahuje předdefinované šablony zpráv, jako je požadavek / odpověď. Klient nebo server může poslat zprávu druhé straně.

HTTP umožňuje zprávě požadavku přejít z klienta na server a poté odešle odpověď. V určitém okamžiku klient komunikuje se serverem nebo naopak. Obecně je pro požadavek HTTP zahájeno nové připojení TCP a ukončeno po obdržení odpověď. Je třeba vytvořit nové připojení TCP pro další požadavek / odpověď HTTP.

Pro WS je připojení HTTP aktualizováno pomocí standardního aktualizačního mechanismu. Klient a server komunikují prostřednictvím stejného připojení TCP v rámci životního cyklu připojení WS.

Websocket je protokol nízké úrovně. Vše včetně jednoduchého vzoru požadavku/odpovědi, způsobů vytváření, aktualizace, odstranění potřebných zdrojů a stavových kódů. Všechny jsou pečlivě definovány pro HTTP.

Ws je stavový protokol, zatímco HTTP je stavový protokol.

Připojení WS lze škálovat svisle na jednom serveru, zatímco HTTP lze škálovat vodorovně. Existuje několik proprietárních řešení pro horizontální škálování, ale nejsou založena na standardech.

HTTP přichází s mnoha dalšími výhodami, jako je ukládání do mezipaměti, směrování a multiplexování. To vše musí být definováno v horní části WebSocket a Java databáze.

Články na téma