Próbowałem przeczytać kilka artykułów, ale nie mam jeszcze jasności co do koncepcji.
Czy ktoś chciałby mi wyjaśnić, czym są te technologie:
- Długie odpytywanie
- Zdarzenia wysłane przez serwer
- Gniazda sieciowe
- Kometa
Jedną rzeczą, na którą natknąłem się za każdym razem, było to, że serwer utrzymuje otwarte połączenie i przekazuje dane do klienta. Jak połączenie jest utrzymywane otwarte i w jaki sposób klient otrzymuje wypychane dane? (Jak klient korzysta z danych, może jakiś kod może pomóc?)
Teraz którego z nich powinienem użyć do aplikacji w czasie rzeczywistym. Dużo słyszałem o websockets (z socket.io [biblioteką node.js]), ale dlaczego nie PHP?
php
websocket
comet
long-polling
server-sent-events
użytkownik1437328
źródło
źródło
Odpowiedzi:
W poniższych przykładach klient jest przeglądarką, a serwerem jest serwer WWW obsługujący witrynę.
Zanim zrozumiesz te technologie, musisz najpierw zrozumieć klasyczny ruch internetowy HTTP.
Zwykły HTTP:
Sondowanie Ajax:
Ajax Long-Polling:
Zdarzenia wysłane przez serwer HTML5 (SSE) / EventSource:
Serwer wysyła zdarzenie do klienta, gdy dostępne są nowe informacje.
HTML5 Websockets:
Serwer i klient mogą teraz wysyłać sobie wiadomości, gdy nowe dane (po obu stronach) są dostępne.
Kometa:
Comet to zbiór technik sprzed HTML5, które wykorzystują strumieniowanie i długie odpytywanie w celu uzyskania aplikacji w czasie rzeczywistym. Przeczytaj więcej na wikipedii lub w tym artykule.
Możesz używać PHP z WebSockets, sprawdź Ratchet .
źródło
Tieme włożył wiele wysiłku w swoją doskonałą odpowiedź, ale myślę, że rdzeniem pytania PO jest to, jak te technologie odnoszą się do PHP, a nie jak działa każda z nich.
PHP jest najczęściej używanym językiem w tworzeniu stron internetowych, oprócz oczywistych 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ął jako bardzo podstawowy CGI. PHP posunął się bardzo daleko od wczesnego etapu, ale stało się to małymi krokami. PHP miało już wiele milionów użytkowników, zanim stało się wbudowaną i elastyczną biblioteką C, jaką jest dzisiaj, z których większość była zależna od wcześniejszego modelu wykonania, więc nie podjęła jeszcze solidnej próby ucieczki model cgi wewnętrznie. Nawet interfejs wiersza poleceń wywołuje bibliotekę PHP (libphp5.so w systemie Linux, php5ts.dll w systemie Windows itp.), Tak jakby nadal był cgi przetwarzającym żądanie GET / POST. Nadal wykonuje kod tak, jakby po prostu musiał zbudować „stronę”, a następnie zakończyć swój cykl życia. W rezultacie ma bardzo małe wsparcie dla programowania wielowątkowego lub sterowanego zdarzeniami (w przestrzeni użytkownika PHP), co czyni go obecnie niepraktycznym dla aplikacji dla wielu użytkowników 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 z nich korzysta.
2) PHP nadal ma poważne problemy z odśmiecaniem. Chociaż problemy te stale się poprawiają (prawdopodobnie jest to najlepszy krok do zakończenia cyklu życia, jak opisano powyżej), nawet najlepsze próby tworzenia długo działających aplikacji PHP wymagają regularnego restartowania. To sprawia, że jest to niepraktyczne w przypadku aplikacji w czasie rzeczywistym.
PHP 7 będzie świetnym krokiem do rozwiązania tych problemów i wydaje się bardzo obiecujący jako platforma dla aplikacji w czasie rzeczywistym.
źródło
Próbowałem o nich zanotować i zebrałem i napisałem przykłady z perspektywy Java .
HTTP dla programistów Java
Reverse Ajax - Stary styl
Obsługa asynchronizacji po stronie serwera
Reverse Ajax - Nowy styl
Serwer wysłał zdarzenia
Umieszczam go tutaj dla każdego programisty Java, który zajmuje się tym samym tematem.
źródło
Możesz łatwo używać Node.JS w swojej aplikacji internetowej tylko do komunikacji w czasie rzeczywistym. Node.JS jest naprawdę potężny, jeśli chodzi o WebSockets. Dlatego „Powiadomienia PHP przez Node.js” byłyby świetną koncepcją.
Zobacz ten przykład: Tworzenie aplikacji czatu w czasie rzeczywistym za pomocą PHP i Node.js
źródło