Pregunta ¿Qué son Long-Polling, Websockets, Eventos enviados por el servidor (SSE) y Comet?


He intentado leer algunos artículos, pero aún no tengo muy claro los conceptos.

¿A alguien le gustaría probar a explicarme qué son estas tecnologías?

  1. Sondeo largo
  2. Eventos enviados por el servidor
  3. Websockets
  4. Cometa

Una cosa que encontré cada vez fue que el servidor mantiene una conexión abierta y envía datos al cliente. ¿Cómo se mantiene abierta la conexión y cómo obtiene el cliente los datos enviados? (¿Cómo utiliza el cliente los datos, tal vez algún código podría ayudar?)

Ahora, ¿cuál de ellos debería usar para una aplicación en tiempo real? He estado escuchando mucho sobre websockets (con socket.io [a node.js library]) pero ¿por qué no PHP?


876
2018-06-18 06:28


origen


Respuestas:


En los ejemplos a continuación, el cliente es el navegador y el servidor es el servidor web que aloja el sitio web.

Antes de que pueda entender estas tecnologías, debe comprender clásico Tráfico web HTTP primero.

HTTP regular:

  1. Un cliente solicita una página web desde un servidor.
  2. El servidor calcula la respuesta
  3. El servidor envía la respuesta al cliente.

HTTP

Ajax Polling:

  1. Un cliente solicita una página web desde un servidor utilizando HTTP normal (ver HTTP arriba).
  2. El cliente recibe la página web solicitada y ejecuta el JavaScript en la página que solicita un archivo del servidor a intervalos regulares (por ejemplo, 0,5 segundos).
  3. El servidor calcula cada respuesta y la envía de vuelta, al igual que el tráfico HTTP normal.

Ajax Polling

Ajax Long-Polling:

  1. Un cliente solicita una página web desde un servidor utilizando HTTP normal (ver HTTP arriba).
  2. El cliente recibe la página web solicitada y ejecuta el JavaScript en la página que solicita un archivo del servidor.
  3. El servidor no responde de inmediato con la información solicitada, pero espera hasta que haya nuevo información disponible.
  4. Cuando hay nueva información disponible, el servidor responde con la nueva información.
  5. El cliente recibe la nueva información e inmediatamente envía otra solicitud al servidor, reiniciando el proceso.

Ajax Long-Polling

Servidor HTML5 enviado eventos (SSE) / EventSource:

  1. Un cliente solicita una página web desde un servidor utilizando HTTP normal (ver HTTP arriba).
  2. El cliente recibe la página web solicitada y ejecuta el JavaScript en la página que abre una conexión con el servidor.
  3. El servidor envía un evento al cliente cuando hay nueva información disponible.

    • Tráfico en tiempo real de servidor a cliente, principalmente eso es lo que necesitará
    • Querrá usar un servidor que tenga un bucle de evento
    • No es posible conectarse con un servidor de otro dominio
    • Si quieres leer más, encontré estos muy útiles: (artículo), (artículo), (artículo), (tutorial).

HTML5 SSE

Websockets HTML5:

  1. Un cliente solicita una página web desde un servidor usando http habitual (ver HTTP arriba).
  2. El cliente recibe la página web solicitada y ejecuta el JavaScript en la página que abre una conexión con el servidor.
  3. El servidor y el cliente ahora pueden enviarse mensajes cuando hay nuevos datos disponibles (en ambos lados).

    • Tráfico en tiempo real desde el servidor al cliente y del cliente al servidor
    • Querrá usar un servidor que tenga un bucle de evento
    • Con WebSockets, es posible conectarse con un servidor de otro dominio.
    • También es posible utilizar un servidor websocket alojado de un tercero, por ejemplo Arribista o otros. De esta forma, solo tendrás que implementar el lado del cliente, ¡lo cual es muy fácil!
    • Si quieres leer más, me pareció muy útil:artículo), (artículo) (tutorial)

HTML5 WebSockets

Cometa:

Comet es una colección de técnicas anteriores a HTML5 que usan transmisión y larga encuesta para lograr aplicaciones en tiempo real. Leer más en wikipedia o esta artículo.


Ahora, ¿cuál de ellos debería usar para una aplicación en tiempo real (que necesito   código). He estado escuchando mucho sobre websockets (con socket.io [a   la biblioteca node.js]) pero ¿por qué no PHP?

Puedes usar PHP con WebSockets, echa un vistazo Trinquete.


1855
2017-10-12 08:57



Tieme puso mucho esfuerzo en su excelente respuesta, pero creo que el núcleo de la pregunta de OP es cómo estas tecnologías se relacionan con PHP en lugar de cómo funciona cada tecnología.

PHP es el lenguaje más utilizado en el desarrollo web además del lado obvio del cliente html, css y javascript. Sin embargo, PHP tiene 2 problemas principales cuando se trata de aplicaciones en tiempo real:

1) PHP comenzó como un CGI muy básico. PHP ha progresado mucho desde su primera etapa, pero sucedió en pequeños pasos. PHP ya tenía muchos millones de usuarios en el momento en que se convirtió en la biblioteca C incrustable y flexible que es hoy en día, la mayoría de los cuales dependían de su modelo de ejecución anterior, por lo que aún no ha hecho un intento sólido de escapar del modelo CGI internamente. Incluso la interfaz de línea de comandos invoca la biblioteca de PHP (libphp5.so en linux, php5ts.dll en Windows, etc.) como si todavía fuera un cgi que procesa una solicitud GET / POST. Todavía ejecuta el código como si solo tuviera que crear una "página" y luego finalizar su ciclo de vida. Como resultado, tiene muy poco soporte para programación multihilo o basada en eventos (dentro del espacio de usuario PHP), lo que hace que actualmente no sea práctico para aplicaciones multiusuario en tiempo real.

Tenga en cuenta que PHP tiene extensiones para proporcionar bucles de eventos (como libevent) e hilos (como pthreads) en el espacio de usuario de PHP, pero muy, muy pocas de las aplicaciones los usan.

2) PHP todavía tiene problemas importantes con la recolección de basura. Aunque estos problemas han mejorado constantemente (es probable que sea el mejor paso para finalizar el ciclo de vida como se describió anteriormente), incluso los mejores intentos para crear aplicaciones PHP de larga ejecución requieren reiniciarse regularmente. Esto también lo hace poco práctico para aplicaciones en tiempo real.

PHP 7 será un gran paso para solucionar estos problemas también, y parece muy prometedor como una plataforma para aplicaciones en tiempo real.


31
2017-10-14 07:11



Intenté tomar nota de esto y recopilé y escribí ejemplos de un perspectiva de java.

Desarrolladores de HTTP para Java

Reverso Ajax - Estilo antiguo

Async Handling en el lado del servidor

Reverso Ajax - Nuevo estilo

Eventos enviados por el servidor

Poniéndolo aquí para cualquier desarrollador de Java que esté investigando el mismo tema.


7
2018-04-21 14:47