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 fungujeProč 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čí.
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.