it-swarm.com.de

Was sind Long Polling, Websockets, Server-Sent Events (SSE) und Comet?

Ich habe versucht, einige Artikel zu lesen, aber die Konzepte sind mir noch nicht ganz klar.

Möchte jemand versuchen, mir zu erklären, was diese Technologien sind:

  1. Lange Umfrage
  2. Vom Server gesendete Ereignisse
  3. Websockets
  4. Komet

Eine Sache, die mir jedes Mal aufgefallen ist, war, dass der Server eine Verbindung offen hält und Daten an den Client sendet. Wie wird die Verbindung geöffnet und wie erhält der Client die übertragenen Daten? (Wie verwendet der Client die Daten, vielleicht hilft ein bisschen Code?)

Nun, welches davon soll ich für eine Echtzeit-App verwenden. Ich habe viel über Websockets gehört (mit socket.io [einer node.js-Bibliothek]), aber warum nicht PHP?

977
user1437328

In den folgenden Beispielen ist der Client der Browser und der Server der Webserver, der die Website hostet.

Bevor Sie diese Technologien verstehen können, müssen Sie zunächst den klassischen HTTP-Webverkehr verstehen.

Normales HTTP:

  1. Ein Client fordert eine Webseite von einem Server an.
  2. Der Server berechnet die Antwort
  3. Der Server sendet die Antwort an den Client.

HTTP

Ajax Polling:

  1. Ein Client fordert eine Webseite über normales HTTP von einem Server an (siehe HTTP oben).
  2. Der Client empfängt die angeforderte Webseite und führt das JavaScript auf der Seite aus, die in regelmäßigen Abständen (z. B. 0,5 Sekunden) eine Datei vom Server anfordert.
  3. Der Server berechnet jede Antwort und sendet sie wie normalen HTTP-Verkehr zurück.

Ajax Polling

Ajax Long-Polling:

  1. Ein Client fordert eine Webseite über normales HTTP von einem Server an (siehe HTTP oben).
  2. Der Client empfängt die angeforderte Webseite und führt das JavaScript auf der Seite aus, die eine Datei vom Server anfordert.
  3. Der Server antwortet nicht sofort mit den angeforderten Informationen, sondern wartet, bis neue Informationen verfügbar sind.
  4. Wenn neue Informationen verfügbar sind, antwortet der Server mit den neuen Informationen.
  5. Der Client empfängt die neuen Informationen und sendet sofort eine weitere Anforderung an den Server, um den Prozess neu zu starten.

Ajax Long-Polling

Gesendete HTML5-Serverereignisse (SSE)/Ereignisquelle:

  1. Ein Client fordert eine Webseite über normales HTTP von einem Server an (siehe HTTP oben).
  2. Der Client empfängt die angeforderte Webseite und führt das JavaScript auf der Seite aus, die eine Verbindung zum Server herstellt.
  3. Der Server sendet ein Ereignis an den Client, wenn neue Informationen verfügbar sind.

    • Echtzeit-Datenverkehr vom Server zum Client - das ist meistens das, was Sie brauchen
    • Sie möchten einen Server mit einer Ereignisschleife verwenden
    • Verbindungen mit Servern aus anderen Domänen sind nur möglich mit korrekten CORS-Einstellungen
    • Wenn Sie mehr lesen möchten, fand ich diese sehr nützlich: (Artikel) , (Artikel) , (Artikel) , (Tutorial) .

HTML5 SSE

HTML5 Websockets:

  1. Ein Client fordert eine Webseite über normales http von einem Server an (siehe HTTP oben).
  2. Der Client empfängt die angeforderte Webseite und führt das JavaScript auf der Seite aus, die eine Verbindung zum Server herstellt.
  3. Der Server und der Client können sich jetzt gegenseitig Nachrichten senden, wenn neue Daten (auf beiden Seiten) verfügbar sind.

    • Echtzeitverkehr vom Server zum Client und vom Client zum Server
    • Sie möchten einen Server mit einer Ereignisschleife verwenden
    • Mit WebSockets ist es möglich, eine Verbindung mit einem Server aus einer anderen Domäne herzustellen.
    • Es ist auch möglich, einen von einem Drittanbieter gehosteten Websocket-Server zu verwenden, z. B. Pusher oder others . Auf diese Weise müssen Sie nur die Client-Seite implementieren, was sehr einfach ist!
    • Wenn Sie mehr lesen möchten, fand ich diese sehr nützlich: ( Artikel ), (Artikel) ( Tutorial ).

HTML5 WebSockets

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 this Artikel.


Nun, welches davon soll ich für eine Echtzeit-App verwenden (die ich codieren muss). Ich habe viel über Websockets gehört (mit socket.io [einer node.js-Bibliothek]), aber warum nicht PHP?

Sie können PHP mit WebSockets verwenden, check out Ratchet .

2001
Tieme

Tieme hat viel Mühe in seine hervorragende 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 HTML, CSS und Javascript die am häufigsten verwendete Sprache in der Webentwicklung. Dennoch hat PHP zwei Hauptprobleme, wenn es um Echtzeitanwendungen geht:

1) PHP begann als sehr einfaches CGI. PHP hat sich in der Anfangsphase sehr weit entwickelt, 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 ein solider Versuch, dem CGI-Modell intern zu entkommen. Sogar die Befehlszeilenschnittstelle ruft die Bibliothek PHP (libphp5.so unter Linux, php5ts.dll unter Windows usw.) auf, als ob sie immer noch eine CGI-Datei wäre, die eine GET/POST-Anforderung verarbeitet. Es führt weiterhin Code aus, als müsse es nur eine "Seite" erstellen und dann den Lebenszyklus beenden. Infolgedessen wird Multithread- oder ereignisgesteuerte Programmierung (innerhalb von PHP Userspace) kaum unterstützt, so dass dies derzeit für Echtzeitanwendungen mit mehreren Benutzern unpraktisch ist.

Beachten Sie, dass PHP Erweiterungen hat, um Ereignisschleifen (wie libevent) und Threads (wie pthreads) in PHP Userspace bereitzustellen, aber sehr, sehr wenige Anwendungen verwenden diese.

2) PHP hat immer noch erhebliche Probleme mit der Garbage Collection. Obwohl sich diese Probleme stetig verbessert haben (wahrscheinlich ist es der größte Schritt, den Lebenszyklus wie oben beschrieben zu beenden), müssen selbst die besten Versuche, PHP Anwendungen mit langer Laufzeit zu erstellen, regelmäßig neu gestartet werden. Dies macht es auch für Echtzeitanwendungen unpraktisch.

PHP 7 wird ein guter Schritt sein, um diese Probleme zu beheben, und scheint als Plattform für Echtzeitanwendungen sehr vielversprechend zu sein.

36
JSON

Ich habe versucht, mir darüber Notizen zu machen und Beispiele aus einer Java-Perspektive gesammelt und geschrieben.

HTTP für Java Entwickler

Reverse Ajax - Old style

Async Handling auf der Serverseite

Reverse Ajax - Neuer Stil

Server Sent Events

Stellen Sie es hier für jeden Java Entwickler, der sich mit dem gleichen Thema befasst.

9
John

Sie können Node.JS in Ihrer Web-App ganz einfach nur für die Echtzeitkommunikation verwenden. Node.JS ist wirklich leistungsstark, wenn es um WebSockets geht. Daher wäre "PHP Notifications via Node.js" ein großartiges Konzept.

Siehe dieses Beispiel: Erstellen einer Echtzeit-Chat-App mit PHP und Node.js

0
Supun Kavinda