Czym są Long-Polling, Websockets, Server-Sent Events (SSE) i Comet?

Próbowałem przeczytać kilka artykułów, ale nie jestem jeszcze zbyt jasny co do pojęć.

Czy ktoś chciałby mi wyjaśnić czym są te technologie:

  1. Długi Sondaż
  2. Zdarzenia Wysłane Przez Serwer
  3. Websockets
  4. Kometa

Jedną z rzeczy, na którą za każdym razem natknąłem się, było to, że serwer utrzymuje otwarte połączenie i wysyła dane do klienta. W jaki sposób połączenie jest otwarte i w jaki sposób klient otrzymuje dane? (Jak Klient korzysta z danych, może jakiś kod pomoże?)

Teraz, którego z nich powinienem użyć do aplikacji w czasie rzeczywistym. Dużo słyszałem o websocketach (z socket.io [węzeł.biblioteka js]) ale dlaczego nie PHP?

Author: DOK, 2012-06-18

3 answers

w poniższych przykładach klientem jest przeglądarka, a serwerem jest serwer obsługujący stronę internetową.

Zanim zrozumiesz te technologie, musisz najpierw zrozumieć klasyczny ruch sieciowy HTTP.

Zwykły HTTP:

  1. klient żąda strony internetowej z serwera.
  2. serwer oblicza odpowiedź
  3. serwer wysyła odpowiedź do klienta.

HTTP

Ajax Ankieta:

  1. klient żąda strony internetowej z serwera za pomocą zwykłego HTTP (patrz HTTP powyżej).
  2. klient otrzymuje żądaną stronę internetową i wykonuje JavaScript na stronie, która żąda pliku z serwera w regularnych odstępach czasu (np. 0,5 sekundy).
  3. serwer oblicza każdą odpowiedź i odsyła ją z powrotem, tak jak normalny ruch HTTP.

Ajax Ankietowanie

Ajax Long-Polling:

  1. klient żąda strony internetowej z serwera używając zwykłego HTTP (patrz HTTP powyżej).
  2. klient otrzymuje żądaną stronę internetową i wykonuje JavaScript na stronie, która żąda pliku z serwera.
  3. serwer nie odpowiada od razu żądanymi informacjami, ale czeka, aż pojawi się nowa informacja dostępna.
  4. gdy dostępne są nowe informacje, serwer odpowiada nowymi informacjami.
  5. klient otrzymuje nową informację i natychmiast wysyła kolejną żądanie do serwera, ponowne rozpoczęcie procesu.

Ajax Long-Polling

HTML5 Server Sent Events ( SSE) / EventSource:

  1. klient żąda strony internetowej z serwera za pomocą zwykłego HTTP (patrz HTTP powyżej).
  2. klient otrzymuje żądaną stronę internetową i wykonuje JavaScript na stronie, która otwiera połączenie z serwerem.
  3. Serwer wysyła Zdarzenie do klienta, gdy pojawią się nowe informacje.

    • ruch w czasie rzeczywistym od serwera do klienta, głównie tego potrzebujesz
    • będziesz chciał użyć serwera, który ma pętlę zdarzeń
    • nie można połączyć się z serwerem z innej domeny
    • Jeśli chcesz przeczytać więcej, uznałem je za bardzo przydatne: (Artykuł), (Artykuł), (Artykuł), (tutorial) .

HTML5 SSE

HTML5 Websockets:

  1. klient żąda strony internetowej z serwera za pomocą zwykłego http (zobacz HTTP powyżej).
  2. klient otrzymuje żądaną stronę internetową i wykonuje JavaScript na stronie, która otwiera połączenie z serwerem.
  3. Serwer i klient mogą teraz wysyłać sobie wiadomości, gdy dostępne są nowe dane (po obu stronach).

      W czasie rzeczywistym ruch z serwera do klienta i Z klienta do serwera
  4. będziesz chciał użyć serwera, który ma pętlę zdarzeń
  5. za pomocą WebSockets można połącz się z serwerem z innej domeny.
  6. Istnieje również możliwość korzystania z zewnętrznego hostowanego serwera websocket, na przykład Pusher lub inne . W ten sposób będziesz musiał tylko zaimplementować stronę klienta, co jest bardzo proste!
  7. Jeśli chcesz przeczytać więcej, uważam, że są one bardzo przydatne: (Artykuł), (Artykuł) (tutorial ).

HTML5 WebSockets

Kometa:

Comet to zbiór technik przed HTML5, które wykorzystują streaming i long-polling, aby osiągnąć aplikacje w czasie rzeczywistym. Czytaj więcej na wikipedia lub ten artykuł.


Teraz, którego z nich powinienem użyć do aplikacji w czasie rzeczywistym (że muszę kod). Dużo słyszałem o websocketach (z socket.io [a węzeł.biblioteka js]) ale dlaczego nie PHP ?

Możesz używać PHP z WebSockets, sprawdź Ratchet .

 1877
Author: Tieme,
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-11-11 11:32:55

Tieme włożył wiele wysiłku w swoją doskonałą odpowiedź, ale myślę, że sednem pytania OPs jest to, jak te technologie odnoszą się do PHP, a nie jak każda technologia działa.

PHP jest najczęściej używanym językiem w tworzeniu stron internetowych, oprócz oczywistego html, css i javascript po stronie klienta. Jednak PHP ma 2 główne problemy, jeśli chodzi o aplikacje w czasie rzeczywistym:

1) PHP zaczęło się jako bardzo podstawowy CGI. PHP rozwinęło się bardzo daleko od wczesnego etapu, ale stało się to w małych kroki. PHP miało już wiele milionów użytkowników, zanim stało się elastyczną biblioteką C, którą jest obecnie, a większość z nich była uzależniona od wcześniejszego modelu wykonania, więc nie podjęła jeszcze solidnej próby ucieczki od modelu CGI wewnętrznie. Nawet interfejs wiersza poleceń wywołuje bibliotekę PHP (libphp5.so na Linuksie php5ts.dll na windows, itp.) tak, jakby nadal CGI Przetwarzające żądanie GET / POST. Nadal wykonuje kod tak, jakby po prostu musiał zbudować "stronę", a następnie zakończyć to cykl życia. W rezultacie ma bardzo małe wsparcie dla programowania wielowątkowego lub zdarzeń (w przestrzeni użytkownika PHP), co czyni go obecnie niepraktycznym dla aplikacji wielozadaniowych w czasie rzeczywistym.

Zauważ, że PHP ma rozszerzenia zapewniające pętle zdarzeń (takie jak libevent) i wątki (takie jak pthreads) w przestrzeni użytkownika PHP, ale bardzo, bardzo, niewiele aplikacji używa tych pętli.

2) PHP nadal ma istotne problemy z garbage collection. Chociaż kwestie te były konsekwentnie poprawa (prawdopodobnie jest to największy krok do zakończenia cyklu życia, jak opisano powyżej), nawet najlepsze próby tworzenia długo działających aplikacji PHP wymagają regularnego ponownego uruchamiania. To również czyni go niepraktycznym dla aplikacji w czasie rzeczywistym.

PHP 7 będzie również świetnym krokiem do rozwiązania tych problemów i wydaje się bardzo obiecujące jako platforma dla aplikacji w czasie rzeczywistym.

 34
Author: JSON,
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
2015-05-07 02:15:32

Starałem się o nich zanotować i zebrałem i napisałem przykłady z perspektywy Javy.

HTTP dla programistów Java

Reverse Ajax-Old style

Obsługa asynchroniczna po stronie serwera

Reverse Ajax-Nowy Styl

Server Sent Events

Umieszczenie go tutaj dla każdego programisty Javy, który zajmuje się tym samym tematem.

 8
Author: John,
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-12-07 09:08:56