vue keep alive http chat keep-alive

http - keep-alive vue



Use HTTP Keep-Alive para que el servidor se comunique con el cliente (3)

Con HTTP 1.1, keep-alive es el comportamiento predeterminado. (En HTTP 1.0, el comportamiento predeterminado era cerrar la conexión.) El servidor debe enviar el encabezado ''Conexión: cerrar'' para terminar la conexión con la primera respuesta. De modo que todavía hay un socket TCP disponible para enviar datos, pero solo presionar los datos del servidor violaría el protocolo HTTP de una manera importante. Incluso al usar keep-alive, el cliente aún tendría que sondear el servidor.

Es importante distinguir entre HTTP Keepalive y TCP Keepalive. HTTP keepalive evita que la conexión sea cerrada por el servidor o el cliente. TCP keepalive se usa cuando la conexión puede estar inactiva durante un período de tiempo prolongado y puede ser eliminada por un proxy o cortafuegos NAT. TCP keepalive se activa por socket por llamadas setsockopt ().

Al realizar una "encuesta larga" para eliminar la necesidad de volver a realizar una encuesta, es posible que se necesite TCP keepalive.

Recientemente, en una entrevista, me preguntaron cómo abordaría una aplicación de cliente de chat en línea. Pasé por la solución estándar de "sondeo", pero me cortaron porque el entrevistador estaba buscando el método "HTTP 1.1 keep-alive". Habiendo usado HTTP por bastante tiempo y recordando que todo el punto era ser "sin estado", esto nunca se me ocurrió (también, sin mencionar que keep-alive no se implementa de manera consistente).

Mi pregunta es, ¿es posible que un servidor web transmita y / o envíe información a un cliente cuando se ha establecido el encabezado "keep-alive"?


Keep-alive simplemente tiene un socket TCP abierto, de modo que cada vez que sondeas, guardas la sobrecarga de los paquetes de configuración / desmontaje de TCP, pero aún tienes que sondear.

Sin embargo, "larga encuesta" es una estrategia para que el servidor web difunda las notificaciones al cliente. Esencialmente, el cliente emite una solicitud GET, pero en lugar de responder de inmediato, el servidor web espera hasta que tenga una notificación para enviar, momento en el que responde a la solicitud GET. Esto elimina la necesidad de que los paquetes vayan a través del cable para fines de sondeo, y mantiene la conexión sin estado, que como usted menciona correctamente es uno de los propósitos del protocolo.


Puede leer más acerca de los servidores Comet . Eso suena básicamente como el enfoque sobre el que el entrevistador preguntaba. Su efectividad es discutida por algunos, pero se ha usado en varias situaciones similares.

Por ejemplo, creo que gmail usa tecnologías de cometas para algunas cosas (pero no me cites).

Otro ejemplo que parece relevante es BOSH , que es un protocolo para transmitir información de chat usando HTTP y XMPP. Pero no creo que el uso de Keep-alive esté involucrado en eso.