W jakich sytuacjach preferowany byłby AJAX long / short ankiet zamiast HTML5 WebSockets?

Buduję małą aplikację do czatu dla znajomych, ale nie jestem pewien, jak w odpowiednim czasie uzyskać informacje, które nie są tak ręczne lub tak podstawowe, jak wymuszanie odświeżania strony.

Obecnie implementuję to za pomocą prostego Ajaxu, ale ma to wadę regularnego uderzania w serwer, gdy upływa krótki czas.

Badając długie / krótkie ankiety, natknąłem się na WEBSOCKETY HTML5. To wydaje się łatwe do wdrożenia, ale nie jestem pewien, czy są jakieś ukryte wady. Na przykład myślę, że WebSockets jest obsługiwany tylko przez niektóre przeglądarki. Czy są inne wady WebSockets, których powinienem być świadomy?

Ponieważ wydaje się, że obie technologie robią to samo, w jakich scenariuszach wolimy używać jednej nad drugą? Dokładniej, czy HTML5 WebSockets wykonane AJAX długie / krótkie ankiety przestarzałe, czy też istnieją przekonujące powody, aby preferować AJAX zamiast WebSockets?

Author: Cody Gray, 2012-04-05

3 answers

WebSockets to zdecydowanie przyszłość.

Long polling jest brudnym obejściem zapobiegającym tworzeniu połączeń dla każdego żądania, tak jak robi to AJAX -- ale long polling został stworzony, gdy WebSockets nie istniały. Teraz dzięki WebSockets, długie sondaże znikają.

WebRTC pozwala na komunikację peer-to-peer.

Polecam naukę WebSockets.

Porównanie:

różnych technik komunikacji na web

  • AJAX - requestresponse. Tworzy połączenie z serwerem, wysyła nagłówki żądań z opcjonalnymi danymi, pobiera odpowiedź z serwera i zamyka połączenie. obsługiwane we wszystkich głównych przeglądarkach.

  • Długa ankieta - requestwaitresponse. Tworzy połączenie z serwerem, tak jak robi to AJAX, ale utrzymuje połączenie keep-alive otwarte przez jakiś czas(nie długo). Podczas połączenia otwarty klient może odbierać dane z serwera. Klient musi okresowo nawiązywać połączenie po zamknięciu połączenia, z powodu ograniczeń czasowych lub danych eof. Po stronie serwera jest on nadal traktowany jak żądanie HTTP, tak samo jak AJAX, z tym, że odpowiedź na żądanie stanie się teraz lub za jakiś czas w przyszłości, zdefiniowana przez logikę aplikacji. Wykres wsparcia (pełny) | wikipedia

  • WebSockets - clientserver. Utwórz połączenie TCP z serwerem i zachowaj je otwórz tak długo, jak to konieczne. Serwer lub klient może łatwo zamknąć połączenie. Klient przechodzi przez zgodny z HTTP proces uścisku dłoni. Jeśli się powiedzie, wtedy serwer i klient mogą w każdej chwili wymieniać dane w obu kierunkach. Jest wydajny, jeśli aplikacja wymaga częstej wymiany danych w obie strony. WebSockets mają ramkowanie danych, które obejmuje Maskowanie dla każdej wiadomości wysyłanej od klienta do serwera, więc dane są po prostu szyfrowane. Wykres wsparcia (bardzo dobry) | wikipedia

  • WebRTC - peerpeer. Transport do nawiązania komunikacji między klientami i jest transport-agnostic, więc może korzystać z UDP, TCP lub nawet bardziej abstrakcyjnych warstw. Jest to zwykle używane do przesyłania danych o dużej głośności, takich jak przesyłanie strumieniowe wideo / audio, gdzie niezawodność jest drugorzędna, a kilka klatek lub zmniejszenie postępu jakości można poświęcić na rzecz czasu reakcji i, co najmniej, transferu danych. Obie strony (rówieśnicy) mogą przesyłać dane do siebie niezależnie. Chociaż może być używany całkowicie niezależnie od scentralizowanych serwerów, nadal wymaga pewnego sposobu wymiany danych punktów końcowych, gdzie w większości przypadków programiści nadal używają scentralizowanych serwerów do" łączenia " rówieśników. Jest to wymagane tylko do wymiany danych niezbędnych do nawiązania połączenia, po czym scentralizowany serwer nie jest wymagany. Wykres wsparcia (średni) | wikipedia

  • Zdarzenia Wysłane Przez Serwer - clientserver. Klient ustanawia stałe i długoterminowe połączenie z serwerem. Tylko serwer może wysyłać dane do klienta. Jeśli klient chce wysłać dane do serwera, wymagałoby to użycia innej technologii/protokołu. Protokół ten jest kompatybilny z HTTP i prosty w implementacji na większości platform po stronie serwera. Jest to preferowany protokół, który należy stosować zamiast długiego sondażu. Wykres wsparcia (dobry, z wyjątkiem IE) | wikipedia

Zalety:

Główną zaletą WebSockets Po stronie serwera jest to, że nie jest to żądanie HTTP (po handshake), ale właściwy protokół komunikacyjny oparty na wiadomościach. To umożliwia osiągnięcie ogromnych zalet wydajności i architektury . Na przykład w node.js, można współdzielić tę samą pamięć dla różnych połączeń gniazd, dzięki czemu mogą one każdy dostęp do współdzielonych zmiennych. Dlatego nie musisz używać bazy danych jako punktu wymiany w środku (jak w Ajaxie lub Long Polling z językiem takim jak PHP). Możesz przechowywać dane w pamięci RAM, a nawet od razu publikować je między gniazdami.

Względy bezpieczeństwa

Ludzie często martwią się o bezpieczeństwo Websocketów. Rzeczywistość jest taka, że robi niewielką różnicę, a nawet umieszcza WebSockets jako lepszą opcję. Przede wszystkim dzięki AJAXOWI istnieje większa szansa na MITM , ponieważ każde żądanie jest nowym połączeniem TCP, które przechodzi przez infrastrukturę internetową. Z WebSockets, po podłączeniu jest znacznie trudniejsze do przechwytywania pomiędzy, Z dodatkowo wymuszone maskowanie ramki, gdy dane są przesyłane strumieniowo z Klienta do serwera, jak również dodatkową kompresję, która wymaga więcej wysiłku, aby sondy danych. wszystkie nowoczesne protokoły obsługują zarówno HTTP, jak i HTTPS (szyfrowane).

P. S.

Pamiętaj, że WebSockets generalnie mają bardzo różne podejście do logiki sieci , bardziej jak gry czasu rzeczywistego miał cały ten czas, a nie jak http.

 482
Author: moka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-28 02:44:12

Jedną z technologii, którą pominąłeś, jest wysłane przez serwer zdarzenia / źródło zdarzeń. Czym są Long-Polling, Websockets, Server-Sent Events (SSE) i Comet? ma dobrą dyskusję na ten temat. Pamiętaj, że niektóre z nich są łatwiejsze niż inne do integracji po stronie serwera.

 10
Author: bmm6o,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:03

Dla aplikacji czatowych lub innych aplikacji, które są w ciągłej rozmowie z serwerem, WebSockets są najlepszym rozwiązaniem. Możesz jednak używać WebSockets tylko z serwerem, który je obsługuje, więc może to ograniczyć możliwość korzystania z nich, jeśli nie możesz zainstalować wymaganych bibliotek. W takim przypadku należy użyć Long Polling, aby uzyskać podobną funkcjonalność.

 7
Author: Brant Olsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 13:31:58