Hmmm. I wouldn't use that solution. With Keep-alive you never explicitly close your connections - consumeContent merely reads everything in the response input/error stream and connections are automatically closed when they are idle. Increasing the maximum connections per route only gives you more connections to stall in the same way before running into the same problem. It's possible the server will timeout and close those connections before you exhaust your local connection max but realize you're now tying up somebody else's resources.
Ernest On Nov 17, 3:05 pm, Eurig Jones <[email protected]> wrote: > My thinking was - If there is no obvious "close" method anywhere, and > all examples I've seen of the HttpClient do not mention a close/finish > type method then you would assume that it just handles it for you! > > Looks like that is not always the case, at least in a timely fashion. > > Thanks ernestw I'll have a look at consumeContent, but I got around > the issue another way which I documented in a blog > post:http://androidisland.blogspot.com/2010/11/httpclient-and-connectionpo... > > Regards, > Eurig Jones > > On Nov 17, 3:02 pm, ernestw <[email protected]> wrote: > > > I've run into a similar issue which was solved by making sure to > > always call consumeContent on the HttpEntity contained in the > > HttpResponse object (regardless of the response code). HttpClient > > tries to use keep-alive; if you don't consume every request before > > they are returned to the ThreadSafeClientConnManager, you're left with > > an open connection that isn't expecting to service a new request. > > > If you *really* wanted to, you could grab the ClientConnectionManager > > from the DefaultHttpClient and call closeIdleConnections. I highly > > suggest that you attempt to properly consume HttpEntity objects before > > using closeIdleConnections though. > > > Ernest Woo > > Woo Games > > http://www.woogames.com > > > On Nov 14, 5:37 pm, Eurig Jones <[email protected]> wrote: > > > > I'm having an issue with the HttpClient. It is throwing this exception > > > quite consistently after 3 requests to the same location... > > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): fetch() sending failed > > > to url http://...<myUrl>... > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): > > > org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting > > > for connection > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolBy > > > Route.java: > > > 353) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.conn.tsccm.ConnPoolByRoute > > > $1.getPoolEntry(ConnPoolByRoute.java:238) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager > > > $1.getConnection(ThreadSafeClientConnManager.java:175) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDi > > > rector.java: > > > 325) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.j > > > ava: > > > 555) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.j > > > ava: > > > 487) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.j > > > ava: > > > 465) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.net.HttpCall.fetch(HttpCall.java:111) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.net.HttpCall.fetch(HttpCall.java:132) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.net.HttpCall.post(HttpCall.java:102) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.net.ServerCall.registerGoogle(ServerCall.java: > > > 91) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.activity.RegisterGActivity > > > $RegisterTask.doInBackground(RegisterGActivity.java:201) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > chesspresso.client.android.activity.RegisterGActivity > > > $RegisterTask.doInBackground(RegisterGActivity.java:1) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > android.os.AsyncTask$2.call(AsyncTask.java:185) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > java.util.concurrent.FutureTask.run(FutureTask.java:137) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: > > > 1068) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > java.util.concurrent.ThreadPoolExecutor > > > $Worker.run(ThreadPoolExecutor.java:561) > > > 11-14 22:27:37.299: INFO/ > > > chesspresso.client.android.net.HttpCall(29152): at > > > java.lang.Thread.run(Thread.java:1096) > > > > Max connections seems to be 20 in my connection manager. > > > > Here is my HttpClient creation code... > > > > ... > > > private static DefaultHttpClient httpClient; > > > > static > > > { > > > HttpParams params = new BasicHttpParams(); > > > HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); > > > > SchemeRegistry schemeRegistry = new SchemeRegistry(); > > > schemeRegistry.register(new Scheme("http", > > > PlainSocketFactory.getSocketFactory(), 80)); > > > > HttpConnectionParams.setConnectionTimeout(params, > > > ClientConfig.P_DEFAULT_CONN_TIMEOUT); > > > HttpConnectionParams.setSoTimeout(params, > > > ClientConfig.P_DEFAULT_CONN_TIMEOUT); > > > ConnManagerParams.setTimeout(params, > > > ClientConfig.P_DEFAULT_CONN_TIMEOUT); > > > > httpClient = new DefaultHttpClient(new > > > ThreadSafeClientConnManager(params, schemeRegistry), params);} > > > > ... > > > > I noticed that a few users of Axis2 framework have reported very > > > similar symptoms again after 3 requests to the same url. Axis2 uses > > > Apache HttpClient under the bonnet also. > > > > Has anyone experienced a similar issue? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

