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


Ich habe versucht, einige Artikel zu lesen, aber ich bin noch nicht sehr klar in Bezug auf die Konzepte.

Möchte jemand gerne erklären, was diese Technologien sind:

  1. Langes Polling
  2. Server-gesendete Ereignisse
  3. Websockets
  4. Komet

Eine Sache, auf die ich jedes Mal stieß, war, dass der Server eine Verbindung offen hält und Daten an den Client sendet. Wie bleibt die Verbindung offen und wie bekommt der Client die Push-Daten? (Wie benutzt der Kunde die Daten, vielleicht hilft etwas Code?)

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


876
2018-06-18 06:28


Ursprung


Antworten:


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

Bevor Sie diese Technologien verstehen können, müssen Sie verstehen klassisch HTTP-Web-Verkehr zuerst.

Reguläres 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-Umfrage:

  1. Ein Client fordert eine Webseite von einem Server an, der reguläres HTTP verwendet (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 zurück, genau wie normaler HTTP-Verkehr.

Ajax Polling

Ajax Long-Polling:

  1. Ein Client fordert eine Webseite von einem Server an, der reguläres HTTP verwendet (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 es da ist Neu Informationen verfügbar.
  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-Server-Ereignisse (SSE) / EventSource:

  1. Ein Client fordert eine Webseite von einem Server an, der reguläres HTTP verwendet (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 von Server zu Client, meist das, was Sie brauchen
    • Sie sollten einen Server mit einer Ereignisschleife verwenden
    • Es ist nicht möglich, sich mit einem Server aus einer anderen Domäne zu verbinden
    • Wenn Sie mehr lesen möchten, fand ich diese sehr nützlich: (Artikel), (Artikel), (Artikel), (Anleitung).

HTML5 SSE

HTML5-Websockets:

  1. Ein Client fordert eine Webseite von einem Server an, der reguläres HTTP verwendet (siehe HTTP oben).
  2. Der Client empfängt die angeforderte Webseite und führt das JavaScript auf der Seite aus, die eine Verbindung mit dem Server herstellt.
  3. Der Server und der Client können nun Nachrichten senden, wenn neue Daten (auf beiden Seiten) verfügbar sind.

    • Echtzeitverkehr vom Server zum Client und vom Client zum Server
    • Sie sollten einen Server mit einer Ereignisschleife verwenden
    • Mit WebSockets ist es möglich, sich mit einem Server aus einer anderen Domäne zu verbinden.
    • Es ist auch möglich, einen gehosteten Websocket-Server eines Drittanbieters zu verwenden Pusher oder Andere. 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) (Anleitung).

HTML5 WebSockets

Komet:

Comet ist eine Sammlung von Techniken vor HTML5, die Streaming und Long-Polling verwenden, um Echtzeitanwendungen zu erreichen. Lesen Sie mehr auf Wikipedia oder Dies Artikel.


Nun, welche von denen sollte ich für eine Echtzeit-App verwenden (die ich brauche   Code). Ich habe viel über Websockets gehört (mit socket.io [a   node.js Bibliothek]) aber warum nicht PHP?

Sie können PHP mit WebSockets verwenden, checken Sie aus Ratsche.


1855
2017-10-12 08:57



Tieme hat sehr viel Mühe in seine ausgezeichnete Antwort gesteckt, aber ich denke, der Kern der OP-Frage ist, wie diese Technologien sich auf PHP beziehen und nicht wie jede Technologie funktioniert.

PHP ist die am häufigsten verwendete Sprache in der Web-Entwicklung neben der offensichtlichen Client-Seite HTML, CSS und Javascript. Dennoch hat PHP zwei Hauptprobleme, wenn es um Echtzeitanwendungen geht:

1) PHP begann als sehr einfaches CGI. PHP ist sehr weit fortgeschritten, da es in einem frühen Stadium ist, aber es geschah in kleinen Schritten. PHP hatte bereits viele Millionen von Benutzern, als es die einbettbare und flexible C-Bibliothek wurde, die es heute ist, von denen die meisten von seinem früheren Ausführungsmodell abhängig waren, so dass es noch keinen soliden Versuch unternommen hatte, dem zu entkommen CGI-Modell intern. Sogar die Kommandozeilen-Schnittstelle ruft die PHP-Bibliothek (libphp5.so unter Linux, php5ts.dll unter Windows, usw.) auf, als ob sie immer noch ein CGI wäre, das eine GET / POST-Anfrage verarbeitet. Es führt immer noch Code aus, als müsste er nur eine "Seite" erstellen und dann seinen Lebenszyklus beenden. Als Ergebnis hat es sehr wenig Unterstützung für Multi-Thread- oder Event-Driven-Programmierung (im PHP-Userspace), was es derzeit für Echtzeit-Multi-User-Anwendungen unpraktisch macht.

Beachten Sie, dass PHP Erweiterungen für die Bereitstellung von Ereignisschleifen (wie libevent) und Threads (wie pthreads) im PHP-Benutzerbereich bietet, aber sehr, sehr wenige der Anwendungen verwenden diese.

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

PHP 7 wird ein großer Schritt sein, um diese Probleme ebenfalls zu beheben, und scheint als eine Plattform für Echtzeitanwendungen sehr vielversprechend zu sein.


31
2017-10-14 07:11



Ich habe versucht, darauf aufmerksam zu machen und habe Beispiele von a gesammelt und geschrieben Java-Perspektive.

HTTP für Java-Entwickler

Reverse Ajax - Alter Stil

Async-Behandlung auf Serverseite

Reverse Ajax - Neuer Stil

Server gesendete Ereignisse

Putting es hier für jeden Java-Entwickler, der das gleiche Thema untersucht.


7
2018-04-21 14:47