Ich habe versucht, einige Artikel zu lesen, bin mir aber der Konzepte noch nicht ganz sicher.
Möchte jemand versuchen, mir zu erklären, was diese Technologien sind:
- Lange Umfrage
- Vom Server gesendete Ereignisse
- Websockets
- Komet
Eine Sache, auf die ich jedes Mal stieß, war, dass der Server eine Verbindung offen hält und Daten an den Client weiterleitet. Wie wird die Verbindung offen gehalten und wie erhält der Client die Push-Daten? (Wie verwendet der Client die Daten, möglicherweise hilft Code?)
Welchen von ihnen soll ich nun für eine Echtzeit-App verwenden? Ich habe viel über Websockets gehört (mit socket.io [einer node.js-Bibliothek]), aber warum nicht PHP?
php
websocket
comet
long-polling
server-sent-events
user1437328
quelle
quelle
Antworten:
In den folgenden Beispielen ist der Client der Browser und der Server der Webserver, auf dem die Website gehostet wird.
Bevor Sie diese Technologien verstehen können, müssen Sie zuerst den klassischen HTTP-Webverkehr verstehen .
Normales HTTP:
Ajax Polling:
Ajax Long-Polling:
HTML5 Server Sent Events (SSE) / EventSource:
Der Server sendet ein Ereignis an den Client, wenn neue Informationen verfügbar sind.
HTML5-Websockets:
Der Server und der Client können sich jetzt gegenseitig Nachrichten senden, wenn neue Daten (auf beiden Seiten) verfügbar sind.
Komet:
Comet ist eine Sammlung von Techniken vor HTML5, die Streaming und Long-Polling verwenden, um Echtzeitanwendungen zu erzielen. Lesen Sie mehr auf Wikipedia oder diesem Artikel.
Sie können PHP mit WebSockets verwenden. Schauen Sie sich Ratchet an .
quelle
Tieme hat viel Mühe in seine exzellente Antwort gesteckt, aber ich denke, der Kern der OP-Frage ist, wie sich diese Technologien auf PHP beziehen und nicht wie jede Technologie funktioniert.
PHP ist neben dem offensichtlichen clientseitigen HTML, CSS und Javascript die am häufigsten verwendete Sprache in der Webentwicklung. PHP hat jedoch zwei Hauptprobleme, wenn es um Echtzeitanwendungen geht:
1) PHP wurde als sehr einfaches CGI gestartet. PHP ist seit seinem frühen Stadium sehr weit fortgeschritten, aber es geschah in kleinen Schritten. PHP hatte bereits viele Millionen Benutzer, als es zur einbettbaren und flexiblen C-Bibliothek wurde, von der die meisten von seinem früheren Ausführungsmodell abhängig waren. Daher hat es noch keinen soliden Versuch unternommen, dem zu entkommen CGI-Modell intern. Sogar die Befehlszeilenschnittstelle ruft die PHP-Bibliothek auf (libphp5.so unter Linux, php5ts.dll unter Windows usw.), als ob es sich immer noch um ein CGI handelt, das eine GET / POST-Anforderung verarbeitet. Es führt weiterhin Code aus, als müsste nur eine "Seite" erstellt und dann der Lebenszyklus beendet werden. Infolgedessen wird die Multithread- oder ereignisgesteuerte Programmierung (innerhalb des PHP-Benutzerbereichs) kaum unterstützt, sodass sie derzeit für Echtzeitanwendungen mit mehreren Benutzern unpraktisch ist.
Beachten Sie, dass PHP über Erweiterungen verfügt, um Ereignisschleifen (wie z. B. libevent) und Threads (wie z. B. pthreads) im PHP-Benutzerbereich bereitzustellen, aber nur sehr wenige Anwendungen verwenden diese.
2) PHP hat immer noch erhebliche Probleme mit der Speicherbereinigung. Obwohl sich diese Probleme ständig verbessert haben (wahrscheinlich der größte Schritt, um den Lebenszyklus wie oben beschrieben zu beenden), müssen selbst die besten Versuche, lang laufende PHP-Anwendungen zu erstellen, regelmäßig neu gestartet werden. Dies macht es auch für Echtzeitanwendungen unpraktisch.
PHP 7 wird auch ein großer Schritt sein, um diese Probleme zu beheben, und scheint als Plattform für Echtzeitanwendungen sehr vielversprechend zu sein.
quelle
Ich habe versucht, dies zu notieren und Beispiele aus einer Java-Perspektive gesammelt und geschrieben .
HTTP für Java-Entwickler
Reverse Ajax - Alter Stil
Asynchrone Behandlung auf der Serverseite
Reverse Ajax - Neuer Stil
Vom Server gesendete Ereignisse
Stellen Sie es hier für jeden Java-Entwickler ein, der sich mit dem gleichen Thema befasst.
quelle
Sie können Node.JS in Ihrer Web-App problemlos nur für die Echtzeitkommunikation verwenden. Node.JS ist wirklich mächtig, wenn es um WebSockets geht. Daher wäre "PHP-Benachrichtigungen über Node.js" ein großartiges Konzept.
Siehe dieses Beispiel: Erstellen einer Echtzeit-Chat-App mit PHP und Node.js.
quelle