On Fri, 2018-04-13 at 16:54 +0800, Jim Ma wrote: > That makes sense. > In my case, there is long time connection and client waiting for the > terminating chunk to close the inputstream. Is there any approach > that we > can > force to set the data stream chunk is terminating and this connection > can > be released to pool ? >
Not unless one can open another connection, send a message and inform the server to terminate the data stream. Overall, it would be massively cheaper to drop the original connection in the first place. Alternatively one could use HTTP/1.1 connection in a full duplex mode to push chunks of data to the server or a HTTP/2 connection with proper message multiplexing. Oleg > > On Fri, Apr 13, 2018 at 4:27 PM, Oleg Kalnichevski <ol...@apache.org> > wrote: > > > On Fri, 2018-04-13 at 10:50 +0800, Jim Ma wrote: > > > Thanks, Oleg. Can you please explain it more ? Do you mean the > > > state of a connection is inconsistent when the chunked > > > inputstream > > > isn't fully consumed ? > > > > > > > If the connection were to be returned back to the pool and re-used > > for > > another message exchange, the new consumer would get chunks of the > > previous data stream in response to its request instead of a valid > > HTTP > > response message. > > > > Oleg > > > > > > > > > On Thu, Apr 12, 2018 at 5:38 PM, Oleg Kalnichevski <olegk@apache. > > > org> > > > wrote: > > > > On Thu, 2018-04-12 at 15:44 +0800, Jim Ma wrote: > > > > > Hi, > > > > > When I tried to create http client with > > > > > a PoolingHttpClientConnectionManager and send get request to > > > > > read > > > > > > > > the > > > > > chunk > > > > > body with the following lines: > > > > > httpClient = HttpClientBuilder.create() > > > > > > > > > > > > > .setConnectionManager(poolingHttpClientConnect > > > > ionM > > > > an > > > > > ager) > > > > > .disableContentCompression().build(); > > > > > ... > > > > > HttpResposne res = httpClient.execute(httpGetMethod, ctx); > > > > > InputStream inputStream = res.getEntity().getContent(); > > > > > //read inputstream > > > > > > > > > > After read several bytes or not even read from InputStream, > > > > > I'd > > > > > > > > like > > > > > to > > > > > drop the response message and release the connection at any > > > > > time > > > > > without > > > > > waiting the empty chunk arrives. > > > > > But the inputstream here is an EofSensorInputStream which > > > > > can > > > > > > > > only > > > > > release > > > > > the connection after the response is consumed, so when I call > > > > > inputstream.close() it actually blocks there and wait the > > > > > terminating > > > > > chunk. > > > > > Is there any approach that I can force to release this > > > > > connection > > > > > > > > to > > > > > pool > > > > > without discard it and make keep-alive work ? > > > > > > > > > > > > > Connection whose state is inconsistent cannot be re-used / kept > > > > alive. > > > > > > > > Oleg > > > > > > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org