Estoy tratando de verificar que se usen conexiones persistentes HTTP durante la comunicación con un servidor web Tomcat que estoy ejecutando. Actualmente, puedo recuperar un recurso en mi servidor desde un navegador (por ejemplo, Chrome) y verificar usando netstat que la conexión está establecida:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
Sin embargo, si uso curl, nunca veo la conexión en el servidor en netstat.
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
También intenté usar el siguiente comando curl:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Aquí está la versión curl de mi máquina cliente:
[server:/tmp]$ curl -V
curl 7.19.5 (x86_64-unknown-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 libssh2/1.1
Protocols: tftp ftp telnet dict http file https ftps scp sftp
Features: IDN IPv6 Largefile NTLM SSL libz
¿Cómo obtengo curl para usar una conexión persistente / keepalive? He buscado bastante en Google sobre el tema, pero sin éxito. Cabe señalar que también he utilizado links
en la máquina cliente para recuperar el recurso, y que hace darme una ESTABLISHED
conexión en el servidor.
Avíseme si necesito proporcionar más información.
Respuestas:
curl ya usa keepalive por defecto.
Como ejemplo:
Produce lo siguiente:
Este fragmento:
Indica que reutilizó la misma conexión.
Use lo mismo "
curl -v http://my.server/url1 http://my.server/url2
" invocación contra su servidor y verifique que vea el mismo mensaje.Considere usar tcpdump en lugar de netstat para ver cómo se manejan los paquetes. netstat solo te dará un vistazo momentáneo de lo que está sucediendo, mientras que con tcpdump verás cada paquete involucrado. Otra opción es Wireshark.
fuente
ESTABLISHED
conexión en el servidor solo cuando estoy usando curl.Si su servidor permite 'KeepAlive On', puede usar telnet para mantener una conexión persistente de la siguiente manera:
fuente
Una forma de probar la conexión persistente HTTP / Keep-Alive es ver si la conexión TCP se reutiliza para conexiones posteriores.
Por ejemplo. Tengo un archivo que contiene el enlace de http://google.com repetido varias veces.
La ejecución del siguiente comando abrirá http://google.com varias veces con la misma conexión TCP.
Y durante este tiempo, si netstat puede encontrar que la conexión TCP no ha cambiado y que la anterior se reinicia (el socket permanece igual)
Pero cuando le pedimos al cliente que use HTTP 1.0 que no admite una conexión HTTP persistente, la dirección del socket cambia
De esto podemos estar seguros de que la conexión TCP se reutiliza.
fuente
- tiempo de mantenimiento
hombre rizo ... hombre ..: D
fuente
--keepalive-time 60
en mi ejemplo?