Próbuję zweryfikować, czy trwałe połączenia HTTP są używane podczas komunikacji z serwerem internetowym Tomcat, który mam uruchomiony. Obecnie mogę pobrać zasób na moim serwerze z przeglądarki (np. Chrome) i zweryfikować za pomocą netstat, czy połączenie zostało nawiązane:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
Jednak jeśli używam curl, nigdy nie widzę połączenia na serwerze w netstat.
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
Próbowałem także użyć następującego polecenia curl:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Oto wersja curl mojego komputera klienckiego:
[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
Jak uzyskać curl, aby korzystać z trwałego połączenia / utrzymywania połączenia? Zrobiłem sporo Google na ten temat, ale bez powodzenia. Należy zauważyć, że użyłem również links
na komputerze klienckim do pobrania zasobu, a to daje mi ESTABLISHED
połączenie na serwerze.
Daj mi znać, jeśli będę musiał podać więcej informacji.
Odpowiedzi:
curl już domyślnie korzysta z keepalive.
Jako przykład:
Wytwarza następujące:
Ten fragment kodu:
Wskazuje, że ponownie użył tego samego połączenia.
Użyj tego samego
curl -v http://my.server/url1 http://my.server/url2
wywołania na serwerze i sprawdź, czy widzisz tę samą wiadomość.Rozważ użycie tcpdump zamiast netstat, aby zobaczyć, jak obsługiwane są pakiety. netstat da ci tylko chwilowe spojrzenie na to, co się dzieje, podczas gdy dzięki tcpdump zobaczysz każdy zaangażowany pakiet. Inną opcją jest Wireshark.
źródło
ESTABLISHED
połączenia na serwerze tylko wtedy, gdy używam curl.Jeśli Twój serwer zezwala na „KeepAlive On”, możesz użyć usługi Telnet, aby utrzymać stałe połączenie tak:
źródło
Jednym ze sposobów przetestowania trwałego połączenia HTTP / Keep-Alive jest sprawdzenie, czy połączenie TCP jest ponownie wykorzystywane do kolejnych połączeń.
Na przykład. Mam plik zawierający link http://google.com powtórzony wiele razy.
Uruchomienie poniżej polecenia spowoduje otwarcie http://google.com wiele razy z tym samym połączeniem TCP.
I w tym czasie, jeśli netstat wykryje, że połączenie TCP nie zmieniło się, a starsze zostało wznowione (gniazdo pozostaje takie samo).
Ale kiedy pytamy klienta o użycie protokołu HTTP 1.0, którego dawka nie obsługuje trwałego połączenia HTTP, zmienia się adres gniazda
z tego możemy być pewni, że połączenie TCP zostanie ponownie wykorzystane.
źródło
- czas imprezowy
man curl ... man ..: D
źródło
--keepalive-time 60
w moim przykładzie?