fbpx

Websocket czym jest i w jakim celu się go używa?

Websocket - co to jest i do czego służy?

WebSocket jest dwukierunkowym protokołem komunikacyjnym używanym w komunikacji klient-serwer.

Jaka jest różnica między Websocket a HTTP?

Większość standardowych aplikacji nie wykorzystuje websocket ponieważ nie potrzebuje przesyłać danych w czasie rzeczywistym. Standardowym rozwiązaniem jest protokół HTTP.

który jest jednokierunkowy, w którym klient wysyła żądanie request, a serwer wysyła response czyli odpowiedź. Weźmy przykład, gdy użytkownik wysyła żądanie do serwera, to żądanie przechodzi w protokołach HTTP lub HTTPS, po otrzymaniu żądania serwer wysyła odpowiedź do klienta, każde żądanie jest powiązane z odpowiednią odpowiedzią, po wysłaniu odpowiedzi połączenie zostaje zamknięte. Każde żądanie HTTP lub HTTPS za każdym razem ustanawia nowe połączenie z serwerem, a po otrzymaniu odpowiedzi połączenie zostaje samo przerwane.

HTTP jest protokołem bezstanowym działającym na bazie protokołu TCP, który jest protokołem zorientowanym na połączenie, gwarantuje dostarczenie transferu pakietów danych przy użyciu metod trójkierunkowego uzgadniania i retransmituje utracone pakiety.

HTTP jest to standard, który zapewnia możliwość działania na dowolnym protokole zorientowanym na połączenie, takim jak TCP lub SCTP. W sytuacji kiedy aplikacja wysyła żądanie HTTP do serwera, między aplikacją a serwerem otwierane jest połączenie TCP, a po otrzymaniu odpowiedzi połączenie TCP zostaje przerwane, każde żądanie HTTP otwiera osobne połączenie TCP z serwerem, np. za pomocą protokołu HTTP. Jeśli więc aplikacja wyśle np. 100 żądań do serwera, zostaje otwartych 100 oddzielnych połączeń TCP a następnie zamyka je po otrzymaniu odpowiedzi.

WebSocket co to jest?

WebSocket jest dwukierunkowym, pełnodupleksowym protokołem używanym w tym samym scenariuszu komunikacji klient-serwer, w przeciwieństwie do HTTP zaczyna się od ws:// lub wss://. Jest to protokół stanowy, co oznacza, że połączenie między klientem a serwerem będzie aktywne, dopóki nie zostanie zakończone przez którąkolwiek ze stron (klient lub serwer). Po zamknięciu połączenia przez klienta i serwer połączenie jest przerywane z obu stron.

Weźmy przykład komunikacji klient-serwer, jest klient, który jest przeglądarką internetową i serwerem, ilekroć inicjujemy połączenie między klientem a serwerem, klient-serwer dokonuje uzgadniania i decyduje o utworzeniu nowego połączenia i tego połączenia pozostanie przy życiu, dopóki nie zostanie rozwiązany przez któregokolwiek z nich. Gdy połączenie jest nawiązane i aktywne, komunikacja odbywa się przy użyciu tego samego kanału połączenia, aż do jego zakończenia.

W ten sposób po uzgadnianiu klient-serwer klient-serwer decyduje o nowym połączeniu, aby utrzymać je przy życiu, to nowe połączenie będzie znane jako WebSocket. Po nawiązaniu łącza komunikacyjnego i otwarciu połączenia wymiana komunikatów będzie odbywała się w trybie dwukierunkowym do czasu utrzymania połączenia klient-serwer. Jeśli któryś z nich (klient-serwer) zostanie “ubity” lub zdecyduje się zamknąć połączenie, jest zamykane przez obie strony. Sposób działania websocket różni się nieco od działania protokołu HTTP, kod statusu 101 oznacza protokół przełączania w WebSocket.

Jakie aplikacje używają websocket? 

Należy wykorzystać websocket wtedy kiedy aplikacja internetowa ma działać w czasie rzeczywistym.

Aplikacja internetowa działająca w czasie rzeczywistym wykorzystuje websocket do wyświetlania danych po stronie klienta, które są stale wysyłane przez serwer. W WebSocket dane są w sposób ciągły pushowane, przesyłane tym samym połączeniem, które jest już otwarte, dlatego WebSocket jest szybszy i poprawia wydajność aplikacji.

Dla np. w witrynie e-commerce, aplikacji agregującej danymi giełdowymi lub handlu bitcoinami, do wyświetlania danych takich jak wzrost i spadek cen, są stale przesyłane przez serwer do klienta za pomocą kanału WebSocket.

Np. Websocket jest używany w aplikacjach czatu

Aplikacje czatu wykorzystują WebSockets do nawiązania połączenia tylko raz w celu wymiany, publikacji i rozgłaszania wiadomości wśród subskrybentów. Ponownie wykorzystuje to samo połączenie WebSocket do wysyłania i odbierania wiadomości oraz do przesyłania wiadomości jeden do jednego.

 WebSocket może być używany, jeśli chcemy mieć aktualizowane w czasie rzeczywistym lub ciągłe strumienie danych, które są przesyłane przez sieć.

Natomiast jeśli chcemy pobrać stare dane lub tylko raz, aby przetworzyć je za pomocą aplikacji, powinniśmy skorzystać z protokołu HTTP. Dane, które nie są często wymagane lub pobierane tylko raz, można odpytać za pomocą zwykłego żądania HTTP.

Jak nawiązywane są połączenia WebSocket?

Proces rozpoczyna się od uzgadniania protokołu WebSocket, które obejmuje użycie nowego schematu ws lub wss. Aby szybko to zrozumieć, możesz uznać je za równoważne odpowiednio HTTP i bezpiecznemu HTTP (HTTPS).

Oczekuje się, że przy użyciu tego schematu serwery i klienci będą postępować zgodnie ze standardowym protokołem połączenia WebSocket. Ustanawianie połączenia WebSocket rozpoczyna się od uaktualnienia żądania HTTP, które zawiera kilka nagłówków, takich jak Connection: Upgrade, Upgrade: WebSocket, Sec-WebSocket-Key i tak dalej.

Request

Połączenie: nagłówek aktualizacji oznacza uzgadnianie protokołu WebSocket, podczas gdy klucz Sec-WebSocket-Key zawiera losową wartość zakodowaną w formacie Base64. Ta wartość jest generowana arbitralnie podczas każdego uzgadniania protokołu WebSocket. Oprócz powyższego nagłówek klucza jest również częścią tego żądania.

Response

Nagłówek odpowiedzi, Sec-WebSocket-Accept, zawiera całą wartość przesłaną w nagłówku żądania Sec-WebSocket-Key. 

Podsumowując WebSocket umożliwia dwukierunkowe sesje komunikacyjne między klientem a serwerem bez konieczności ciągłego odpytywania serwera. Zapewnia zarówno poprawę szybkości, jak i rzeczywiste możliwości w porównaniu z innymi protokołami.