hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From e...@zusammenkunft.net
Subject Re: Apache HttpClient TCP Keep-Alive (socket keep-alive)
Date Wed, 18 May 2016 19:19:00 GMT
How do you know the keepalive packets have not been sent? Did you run a tcpdump? 

The socket API (java and apache) traditionally does not support to configure the keepalive
times, they only allow to turn it on. 

BTW: still think tcp keepalives are not what you want to rely on and might not help to keep
a connection open if an intermediate wants to be an annoyance.

Greetings
Bernd

-- 
http://bernd.eckenfels.net

-----Original Message-----
From: Baratali Izmailov <barataliba@gmail.com>
To: HttpClient User Discussion <httpclient-users@hc.apache.org>
Sent: Mi., 18 Mai 2016 12:37
Subject: Re: Apache HttpClient TCP Keep-Alive (socket keep-alive)

Thank you. I updated Apache HttpClient version as you described. However,
it didn't help, TCP KeepAlive packets were not sent between client and
server.
If correctly understand, the problem is that I cannot edit TCP KeepAlive
timouts in HttpClient or even in Apache httpd server. It works only if I
set timeouts on OS level (in Linux):
sudo sysctl -w net.ipv4.tcp_keepalive_time=60
sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60
sudo sysctl -w net.ipv4.tcp_keepalive_probes=10

With such configs the server sends TCP KeepAlive packets every 60 seconds.

Thanks,
Baratali Izmailov.

On 12 May 2016 at 15:53, Oleg Kalnichevski <olegk@apache.org> wrote:

> On Thu, 2016-05-12 at 13:46 +0100, Baratali Izmailov wrote:
> > > Please consider upgrading. I am not entirely sure if HC 4.2 supports
> TCP keepalive
> > setting.
> >
> > Unfortunately, to upgrade HC we need to upgrade Spring to the latest
> > version which requires Java 8. But, we cannot force our clients to use
> Java
> > 8 yet.
>
> There is no need to upgrade Spring. You can upgrade HC dependency to
> something more recent without upgrading Spring itself.
>
> In this case however you should pass a custom instance of HttpClient to
> ClientHttpRequestFactory
>
>
> https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.html#HttpComponentsClientHttpRequestFactory-org.apache.http.client.HttpClient-
>
> > However, I don't see SO_KEEPALIVE parameter in the lastest Apache HC
> > javadocs in "The following parameters can be used to customize the
> behavior
> > of this class:" section:
> >
> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html
> >
> > Could you please show me example how to set SO_KEEPALIVE parameter in new
> > versions of Apache HC?
> >
>
> ---
> SocketConfig socketConfig = SocketConfig.custom()
>         .setSoKeepAlive(true)
>         .build();
> CloseableHttpClient client = HttpClientBuilder.create()
>         .setDefaultSocketConfig(socketConfig)
>         .build();
> ClientHttpRequestFactory clientfactory = new
> HttpComponentsClientHttpRequestFactory(client);
> ---
>
> Hope this helps
>
> Oleg
>
>
> > Thanks,
> > Baratali Izmailov.
> >
> > On 12 May 2016 at 09:53, Oleg Kalnichevski <olegk@apache.org> wrote:
> >
> > > On Thu, 2016-05-12 at 09:23 +0100, Baratali Izmailov wrote:
> > > > Hello. Thanks for the quick response.
> > > >
> > > > > Is there any way you can turn this into 2 requests?
> > > > For now we cannot split this into 2 HTTP requests, because we have to
> > > > change client-server protocol communication and re-implement some
> parts
> > > of
> > > > our application, which will take much time.
> > > > I understand that it is not that effective to keep connection open
> too
> > > > long, but it's only simple solution I see for now.
> > > >
> > > > > What version of HttpClient are you using? It looks like something
> > > fairly
> > > > old.
> > > > It is 4.2.2. Actually I use Spring 3.2.1 httpInvoker which uses
> > > > DefaultHttpClient.
> > > >
> > >
> > > Please consider upgrading. I am not entirely sure if HC 4.2 supports
> TCP
> > > keepalive setting.
> > >
> > > Oleg
> > >
> > > > > Using TCP keepalive wont help you with default OS settings, it
> would
> > > not
> > > > start to send them in the first 20 idle minutes.
> > > > Can I configure Apache httpd server to do this (set keep-alive
> timeouts)?
> > > >
> > > > Thanks,
> > > > Baratali.
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > >
> > >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>


-----Original Message-----
From: Baratali Izmailov <barataliba@gmail.com>
To: HttpClient User Discussion <httpclient-users@hc.apache.org>
Sent: Mi., 18 Mai 2016 12:37
Subject: Re: Apache HttpClient TCP Keep-Alive (socket keep-alive)

Thank you. I updated Apache HttpClient version as you described. However,
it didn't help, TCP KeepAlive packets were not sent between client and
server.
If correctly understand, the problem is that I cannot edit TCP KeepAlive
timouts in HttpClient or even in Apache httpd server. It works only if I
set timeouts on OS level (in Linux):
sudo sysctl -w net.ipv4.tcp_keepalive_time=60
sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60
sudo sysctl -w net.ipv4.tcp_keepalive_probes=10

With such configs the server sends TCP KeepAlive packets every 60 seconds.

Thanks,
Baratali Izmailov.

On 12 May 2016 at 15:53, Oleg Kalnichevski <olegk@apache.org> wrote:

> On Thu, 2016-05-12 at 13:46 +0100, Baratali Izmailov wrote:
> > > Please consider upgrading. I am not entirely sure if HC 4.2 supports
> TCP keepalive
> > setting.
> >
> > Unfortunately, to upgrade HC we need to upgrade Spring to the latest
> > version which requires Java 8. But, we cannot force our clients to use
> Java
> > 8 yet.
>
> There is no need to upgrade Spring. You can upgrade HC dependency to
> something more recent without upgrading Spring itself.
>
> In this case however you should pass a custom instance of HttpClient to
> ClientHttpRequestFactory
>
>
> https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.html#HttpComponentsClientHttpRequestFactory-org.apache.http.client.HttpClient-
>
> > However, I don't see SO_KEEPALIVE parameter in the lastest Apache HC
> > javadocs in "The following parameters can be used to customize the
> behavior
> > of this class:" section:
> >
> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html
> >
> > Could you please show me example how to set SO_KEEPALIVE parameter in new
> > versions of Apache HC?
> >
>
> ---
> SocketConfig socketConfig = SocketConfig.custom()
>         .setSoKeepAlive(true)
>         .build();
> CloseableHttpClient client = HttpClientBuilder.create()
>         .setDefaultSocketConfig(socketConfig)
>         .build();
> ClientHttpRequestFactory clientfactory = new
> HttpComponentsClientHttpRequestFactory(client);
> ---
>
> Hope this helps
>
> Oleg
>
>
> > Thanks,
> > Baratali Izmailov.
> >
> > On 12 May 2016 at 09:53, Oleg Kalnichevski <olegk@apache.org> wrote:
> >
> > > On Thu, 2016-05-12 at 09:23 +0100, Baratali Izmailov wrote:
> > > > Hello. Thanks for the quick response.
> > > >
> > > > > Is there any way you can turn this into 2 requests?
> > > > For now we cannot split this into 2 HTTP requests, because we have to
> > > > change client-server protocol communication and re-implement some
> parts
> > > of
> > > > our application, which will take much time.
> > > > I understand that it is not that effective to keep connection open
> too
> > > > long, but it's only simple solution I see for now.
> > > >
> > > > > What version of HttpClient are you using? It looks like something
> > > fairly
> > > > old.
> > > > It is 4.2.2. Actually I use Spring 3.2.1 httpInvoker which uses
> > > > DefaultHttpClient.
> > > >
> > >
> > > Please consider upgrading. I am not entirely sure if HC 4.2 supports
> TCP
> > > keepalive setting.
> > >
> > > Oleg
> > >
> > > > > Using TCP keepalive wont help you with default OS settings, it
> would
> > > not
> > > > start to send them in the first 20 idle minutes.
> > > > Can I configure Apache httpd server to do this (set keep-alive
> timeouts)?
> > > >
> > > > Thanks,
> > > > Baratali.
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > >
> > >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message