2012-07-23 89 views
2

我在調用HttpClient.execute(...)之後很長的響應時間,我想確保我已經完成了客​​戶端上的所有工作,以優化HTTP請求的性能。Android HttpClient和ThreadSafeClientConnManager性能

對網絡的請求需要1到40秒的時間,但平均需要4秒左右。我沒有看到網絡連接成爲瓶頸,因爲我使用的是強大的WiFi連接,並且沒有速度問題。

HttpClient的被設置如下:

public static final int MAX_TOTAL_CONNECTION = 20; 
public static final int MAX_CONNECTIONS_PER_ROUTE = 20; 
public static final int TIMEOUT_CONNECT = 15000; 
public static final int TIMEOUT_READ = 15000; 

SchemeRegistry schemeRegistry = new SchemeRegistry(); 
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 

HttpParams connManagerParams = new BasicHttpParams(); 
ConnManagerParams.setMaxTotalConnections(connManagerParams, MAX_TOTAL_CONNECTIONS); 
ConnManagerParams.setMaxConnectionsPerRoute(connManagerParams, new ConnPerRouteBean(MAX_CONNECTIONS_PER_ROUTE)); 

HttpConnectionParams.setConnectionTimeout(connManagerParams, TIMEOUT_CONNECT); 
HttpConnectionParams.setSoTimeout(connManagerParams, TIMEOUT_READ); 

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(new BasicHttpParams(), schemeRegistry); 
sHttpClient = new DefaultHttpClient(cm, connManagerParams); 

現在的主觀問題:是否有此設置一個更好的方法?

我打電話到HttpClient.execute(...)與時間捕獲,所以在execute(...)呼叫下的所有內容是平均4+秒花費。

+0

運行wireshark /鯊魚線,並告訴我們從那裏請求發生了什麼。 – 2012-07-23 23:51:58

+0

也嘗試在連接參數上設置TcpNoDelay。 – 2012-07-23 23:57:13

+0

可能還設置了HttpConnectionParams.setStaleCheckingEnabled(httpClient.getParams(),true); – 2012-07-23 23:58:00

回答

0

我解決了這個問題,但是我會發布發現的問題/解決方案,因爲其他人可能會在這裏找到方法。

本來我以爲一旦它進入HttpClient.execute(...),就會立即執行請求。在我的情況中,這不是真的,因爲我正在使用連接池,它在相同的路由上重新使用連接。此外,客戶端被配置爲每個路由使用2個連接。事實證明,我的一個代碼塊無法解析API響應,並且不能確保連接關閉。隨着應用程序的繼續,多個數據流保持打開狀態並阻止其他未決連接。這種有限的吞吐量會導致我遇到的錯誤行爲。

使用諸如EntityUtils.toString(entity)之類的東西成爲消耗內容並保證連接在完成時關閉的更好方式。

0

嘗試

HttpConnectionParams.setTcpNoDelay(httpClient.getParams(), true); 

運行免費的Wireshark/sharkwire,告訴我們你所看到的。

http://www.wireshark.org/

這會告訴你的時間被消耗在哪裏。

+0

有一個移動客戶端sharkwire什麼的。除了使用wireshark閱讀日誌文件之外,還可以保存日誌文件。 – 2012-07-23 23:52:36

+0

我仍然在等待能夠更好地測試這一點 - 我會將其標記爲正確或完成後提供額外的反饋。 – 2012-07-27 06:05:11