Estou tentando verificar se as conexões persistentes HTTP estão sendo usadas durante a comunicação com um servidor da Web Tomcat que estou executando. Atualmente, posso recuperar um recurso no meu servidor a partir de um navegador (por exemplo, Chrome) e verificar, usando o netstat, se a conexão foi estabelecida:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
No entanto, se eu usar curl, nunca vejo a conexão no servidor no netstat.
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
Eu também tentei usar o seguinte comando curl:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Aqui está a versão de ondulação da minha 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
Como faço para usar o curl para usar uma conexão persistente / keepalive? Eu pesquisei bastante no Google, mas sem sucesso. Note-se que eu também usei links
na máquina do cliente para recuperar o recurso, e que faz me dar uma ESTABLISHED
conexão no servidor.
Informe-me se precisar fornecer mais informações.
Respostas:
o curl já usa keepalive por padrão.
Como um exemplo:
Produz o seguinte:
Este trecho:
Indica que reutilizou a mesma conexão.
Use a mesma "
curl -v http://my.server/url1 http://my.server/url2
" chamada no servidor e verifique se você vê a mesma mensagem.Considere usar tcpdump em vez de netstat para ver como os pacotes são manipulados. O netstat oferece apenas uma visão momentânea do que está acontecendo, enquanto que com o tcpdump você verá todos os pacotes envolvidos. Outra opção é o Wireshark.
fonte
ESTABLISHED
conexão no servidor apenas quando estou usando o curl.Se o seu servidor permitir 'KeepAlive On', você poderá usar o telnet para manter uma conexão persistente da seguinte maneira:
fonte
Uma maneira de testar a conexão persistente HTTP / Keep-Alive é verificar se a conexão TCP é reutilizada para conexões subseqüentes.
Por exemplo. Eu tenho um arquivo contendo o link http://google.com repetido várias vezes.
A execução do comando abaixo abrirá http://google.com várias vezes com a mesma conexão TCP.
E, durante esse período, se você netstat, poderá descobrir que a conexão TCP não foi alterada e a conexão anterior foi redimensionada (o soquete permanece o mesmo).
Mas quando pedimos ao cliente para usar o HTTP 1.0, que não suporta a conexão HTTP persistente, o endereço do soquete muda
disso, podemos ter certeza de que a conexão TCP é reutilizada.
fonte
--keepalive-time
homem enrolar ... homem ..: D
fonte
--keepalive-time 60
no meu exemplo?