這個問題有兩個部分快速REST調用執行
第1部分
我需要進行批量REST API調用的第三方API,即每小時各地300K,所以什麼是最好的方式來優化我的代碼及時獲得/管理響應。正如在一個測試中,我試圖生成1000個線程,並在下面的代碼中調用以在最短時間內獲得響應,但結果非常令人失望。一些電話響應成功,但許多電話返回超時錯誤。
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.example.com");
HttpResponse response;
response = client.execute(httpGet);
System.out.println(response.getStatusLine().getStatusCode());
HttpEntity entity = response.getEntity();
String result = getStringFromInputStream(entity.getContent());
我知道,超時錯誤可能是由於服務器端,但例如服務器返回的響應,我所有的1000線5分鐘的時間內做出反應,那麼我仍無法達到每小時300K電話。其次,我可以用其他方式優化此代碼嗎?
第2部分
我與Java嘗試這樣做,我只是好奇,想知道它會給出更好的結果,如果我用Java以外的語言?即javascript/python/PHP?
更新1個
我的系統規格爲進行
- 的Ubuntu 14.04 64位
- 4GB內存
- 500 GB硬盤
- 英特爾®酷睿™i5-2430M的CPU測試@ 2.40GHz×4
- Internet連接= 1 MB :(
更新2
我的服務器規格進行未來/測試實用
- 美分OS 6.5
- 1 GB RAM
- 1個CPU核心
- 40千兆網絡在
- 125 Mbit網絡輸出:)
請指導。謝謝。
問題是限制因素不是系統的速度,而是連接帶寬。因此,在paralel中執行更多的線程會使每個http請求變得更慢,最終它會花費相同的時間。 – Gumbo 2014-09-27 21:03:22
問題不是你的調用代碼,而是可能是服務器。使用Jetty和Java的NIO類,我們能夠每小時提供比您所談論的更多的請求。我想我們需要更多的信息來告訴你正在調用什麼系統以及請求和響應的大小 – Leon 2014-09-28 12:00:16