Ich versuche zu überprüfen, ob während der Kommunikation mit einem laufenden Tomcat-Webserver dauerhafte HTTP-Verbindungen verwendet werden. Derzeit kann ich eine Ressource auf meinem Server über einen Browser (z. B. Chrome) abrufen und mithilfe von netstat überprüfen, ob die Verbindung hergestellt wurde:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
Wenn ich jedoch curl verwende, wird die Verbindung auf dem Server in netstat nie angezeigt.
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
Ich habe auch versucht, den folgenden Curl-Befehl zu verwenden:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Hier ist die Curl-Version meines Client-Computers:
[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
Wie kann ich Curl dazu bringen, eine dauerhafte / dauerhafte Verbindung zu verwenden? Ich habe ziemlich viel über das Thema gegoogelt, aber ohne Erfolg. Es sollte beachtet werden, dass ich auch links
auf dem Clientcomputer verwendet habe, um die Ressource abzurufen, und das gibt mir eine ESTABLISHED
Verbindung auf dem Server.
Lassen Sie mich wissen, wenn ich weitere Informationen benötigen.
Antworten:
curl verwendet standardmäßig bereits keepalive.
Als Beispiel:
Erzeugt Folgendes:
Dieses Snippet:
Zeigt an, dass dieselbe Verbindung erneut verwendet wurde.
Verwenden Sie denselben
curl -v http://my.server/url1 http://my.server/url2
Aufruf für Ihren Server und überprüfen Sie, ob dieselbe Meldung angezeigt wird.Ziehen Sie die Verwendung von tcpdump anstelle von netstat in Betracht, um zu sehen, wie die Pakete behandelt werden. netstat gibt Ihnen nur einen kurzen Einblick in das Geschehen, während Sie mit tcpdump jedes einzelne betroffene Paket sehen. Eine weitere Option ist Wireshark.
quelle
ESTABLISHED
Verbindung auf dem Server nicht nur dann sehe, wenn ich Curl verwende.Wenn Ihr Server 'KeepAlive On' zulässt, können Sie telnet verwenden, um eine dauerhafte Verbindung aufrechtzuerhalten:
quelle
Eine Möglichkeit, die dauerhafte HTTP-Verbindung / Keep-Alive zu testen, besteht darin, zu prüfen, ob die TCP-Verbindung für nachfolgende Verbindungen wiederverwendet wird.
Beispielsweise. Ich habe eine Datei mit einem Link von http://google.com, der mehrmals wiederholt wurde.
Wenn Sie den folgenden Befehl ausführen, wird http://google.com mehrmals mit derselben TCP-Verbindung geöffnet .
Und während dieser Zeit, wenn Sie netstat finden Sie, dass die TCP-Verbindung nicht geändert wurde und die ältere wiederhergestellt wird (Der Socket bleibt der gleiche).
Wenn wir den Client jedoch auffordern, HTTP 1.0 zu verwenden, das keine dauerhafte HTTP-Verbindung unterstützt, ändert sich die Socket-Adresse
Dadurch können wir sicher sein, dass die TCP-Verbindung wiederverwendet wird.
quelle
--keepalive-time
Mann locken ... Mann ..: D
quelle
--keepalive-time 60
in meinem Beispiel nicht bemerkt ?