WebSocket protokol

WebSocket protokol je komunikační protokol, kterým lze vytvořit v prostředí webu obousměrný komunikační kanál mezi kódem běžícím na klientské straně (například ve webovém prohlížeči) a vzdáleným serverem. Při komunikaci tak již není potřeba používat neefektivní aktivní dotazování prováděním HTTP dotazů, ani zdržování HTTP odpovědí (long polling).

Výhody protokolu Jak funguje
WebSocket protokol

Proč použít WebSocket protokol?

Je nenahraditelný v prostředí webu

WebSocket protokol je navržen pro efektivní obousměrnou komunikaci frontendu a backendu v prostředí webu, kde podobné vlastnosti nenabízí žádná jiná dostupná webová technologie.

Umožňuje komunikaci s prostředím prohlížeče

Pomocí WebSocket protokolu může frontend webové aplikace libovolně komunikovat s backendem v reálném čase anyž by bylo potřeba provádět dodatečné HTTP dotazy.

Umožňuje obousměrnou komunikaci

Hlavním přínosem a také důvodem k použití WebSocket protokolu v prostředí webu je možnost zaslat frontendu informace při změne stavu na backendu, aniž by se frontend sám dotázal / pravidelně dotazoval.

Šetří prostředky v prostředí webu

U menších a častějších zpráv mezi backendem a frontendem přenáší WebSocket oproti aktivnímu dotazování pomocí XMLHttpRequest a long polling mnohem méně dat při menší zátěži serverové strany.

Nahradí opakované HTTP dotazy a long polling

WebSocket nahradí v prostředí webu technologie používáne pro dynamické získávání změn na backendu jako aktivní dotazování pomocí XMLHttpRequest nebo long polling, kdy jsou záměrně zdržovány HTTP odpovědi.

Hodí se pro aplikace v oblasti IoT

WebSocket protokol je také velmi oblíbeným protokolem při různých aplikacích v oblasti IoT, kde se hodí hlavně pro doručování dat z různých senzorů a zařízení do prostředí webu.

HTTP vs WebSocket protokol

U klasického web hostingu je komunikace mezi webovým serverem a klientem prováděná pomocí HTTP protokolu. Rozdíl mezi HTTP protokolem a WebSocket protokolem je v průběhu a trvání komunikace mezi serverem a klientem. U web hostingu klient (obvykle webový prohlížeč) provádí HTTP dotazy na server. Po odeslání požadavku na server, klient obdrží ze serveru odpověď a komunikace je ihned ukončena. U websocket hostingu je naopak navázaná obousměrná komunikace mezi prostředím klienta a serverem a ta je aktivní a umožňuje zasílání zpráv až do doby, než ji jedna ze stran neukončí.

HTTP vs WebSocket

Jak funguje WebSocket protokol

WebSocket protokol používá klient-server architekturu. Komunikace probíhá vždy mezi serverem a klientem, nikdy ne přímo mezi dvěma klienty. Klient se připojí k serveru, provede se úvodní "podání ruky" a poté si klient se serverem libovolně vyměňují zprávy. Každá ze stran pak může kdykoliv iniciovat zavírací "podání ruky" a komunikaci ukončit.

WebSocket Opening Handshake

Než začnou klient se serverem pomocí WebSocket protokolu komunikovat, provedou Opening Handshake. Po navázání TCP spojení zašle klient serveru tzv. Client's Opening Handshake a ten odpoví pomocí Server's Opening Handshake. Client's Opening Handshake má formát HTTP Upgrade requestu a Server's Opening Handshake je HTTP response se stavovým kódem 101 Switching Protocols. V případě, že se povede WebSocket Handshake úspěšně provést následuje samotná komunikace v podobě zasílání zpráv.

Zasílání zpráv přes WebSocket

Po provedeném WebSocket Handshake si mohou klient se serverem vyměňovat data formou zasílání zpráv. Zprávy se mezi klientem a serverem posílají pomocí menších přesně definovaných framů obsahujících data zpráv. WebSocket protokol používá několik typů framů. Text, binary a continuation frame jsou určeny přímo pro přenos zasílánych dat, pro provozní účely pak slouží close, ping a pong frame. Při zasílání zprávy se data zprávy rozdělí do menších framů o předem specifikované velikosti a ty jsou postupně zaslány. Na druhé straně komunikace jsou pak framy přijaty a data z nich spojeny zpátky do původní zprávy. WebSocket protokol tak lze dobře využít také pro potřeby streamování i v případech kdy předem není známa celková velikost odesílaných dat.

Ukončení komunikace

Každá ze stran může kdykoliv ukončit komunikaci. Komunikaci lze ukončiť tzv. čistě provedením Closing Handshake. U WebSocket Closing Handshake si strany navzájem vymění close frame. Strana, která chce komunikaci ukončit zašle close frame, na co druhá strana odpoví také zasláním close framu.

Jak funguje WebSocket