Aplikacje internetowe czasu rzeczywistego

Przy dwóch ostatnich projektach mieliśmy dosłownie przyjemność opracowywać aplikacje czasu rzeczywistego oparte technologie Node.js oraz Ratchet. Ile frajdy to sprawia po latach pracy opartej o czysty protokół HTTP mogę opisać w kilku słowach…

Zalety wykorzystania technologii websocket – bo o nie opierają się Node.js oraz Ratchet – względem protokołu HTTP przynosi dwie podstawowe zalety:

  1. Stanowość – w przeciwności do protokołu HTTP połączenia oparte od sockety są stanowe. Co to oznacza? Otóż wiemy dokładnie kiedy klient przyszedł na naszą stronę, kiedy z niej wyszedł. Przy korzystaniu z czystego protokołu HTTP, który jest bezstanowy (ang. stateless) nie mamy takiej informacji – w dużym uproszczeniu: przeglądarka internetowa wysyła pytanie do serwera, serwer odsyła treść strony internetowej, którą później ta przeglądarka wyświetla. Protokół HTTP nie określa czy użytkownik już wyszedł, że strony, możemy się tylko domyślić na podstawie dalszego braku akcji na stronie. Technologia AJAX częściowo rozwiązywała ten problem jednak daleko było jej do stanowości, którą oferują sockety.
    Możemy jednoznacznie stwierdzić czy użytkownik jeszcze jest na naszej stronie, czy już się z nią rozłączył.
  2. Szybkość! Tak, z wykrzyknikiem! Protokół HTTP ma duży narzut przesyłanych informacji w postaci przerośniętego nagłówka, również sama logika jego działania  powoduje, że jest wolniejszy. Ilość danych przesyłanych za pomocą socketów jest znacznie mniejsza i oparta o czysty protokół TCP.  W efekcie uzyskujemy aplikację, której użytkowanie sprawia wrażenie aplikacji czasu rzeczywistego. Według badań uzyskujemy ponad 3 krotnie szybszy czas odpowiedzi oraz do 1000krotnie mniejszą ilość przesyłanych danych, różnica w szybkości działania jest bezdyskusyjna.

web sockets

Co to nam daje?

Bezpośrednio poszerza to możliwości interakcji pomiędzy użytkownikiem odwiedzającym stronę a naszą aplikacją. Dzięki stanowości możemy realnie i precyzyjnie określić ilość osób w danym momencie korzystających z naszej aplikacji. Możemy także stworzyć aplikacje, których głównym celem jest interakcja pomiędzy użytkownikami aplikacji.

Sockety zamiast HTTP?

Nie. Są świetnym narzędziem tam, gdzie potrzebujemy natychmiastowego przesyłu nowej informacji ze strony serwera, tam gdzie zależy nam na interakcji pomiędzy użytkownikami odwiedzającymi stronę (chaty, komunikatory, gry multiplayer-online). Możemy nimi zastąpić technologię AJAX. Świetnie się też nadają jako back-end do hybrydowych i natywnych aplikacji mobilnych. Są bardzo dobrym uzupełnieniem przy tworzeniu aplikacji internetowych, jednak nie mogą właśnie ze względu na swoją specyfikę zastąpić protokołu HTTP.