2014-09-26 41 views
1

我改變了我的實現使用更新版本的Apache HTTP客戶端(3.x之前,現在4.x) 我的問題是,第一個HTTP請求的一系列4個不同的GET請求需要比以下更長的 。如果在每個請求系列之間完成60秒的暫停,則此問題是可重現的。下面是我的一個簡單基準的結果。服務器代碼保持不變,並且請求也始終相同。 我認爲這個問題是客戶端內部的東西被破壞後,不使用和重新創建 如果有人知道我可以配置什麼來避免這種糟糕的性能,這將是幫助。HTTPClient 4.x - 首先http請求速度明顯較慢

Apache的HTTP客戶端3.x的

REQUEST A duration in ms >> 25 
REQUEST B duration in ms >> 20 
REQUEST C duration in ms >> 15 
REQUEST D duration in ms >> 15 
     ----->>> 60 sec pause 
REQUEST A duration in ms >> 20 
REQUEST B duration in ms >> 15 
REQUEST C duration in ms >> 15 
REQUEST D duration in ms >> 15 

Apache的HTTP客戶端4.2.6

REQUEST A duration in ms >> 4659 
REQUEST B duration in ms >> 25 
REQUEST C duration in ms >> 20 
REQUEST D duration in ms >> 20 
     ----->>> 60 sec pause 
REQUEST A duration in ms >> 4510 
REQUEST B duration in ms >> 20 
REQUEST C duration in ms >> 15 
REQUEST D duration in ms >> 10 

非常感謝你提前

巴蒂爾

+0

您能分享您使用的URL和您的代碼以及HTTP客戶端的確切版本號嗎? – 2014-09-26 11:44:51

+0

你在循環內部創建HttpClient實例嗎? – oleg 2014-09-26 18:25:10

+0

我有同樣的問題 – 2016-04-08 12:14:53

回答

0

臨屋非常感謝你。更確切地說,我在Resteasy 3.0.9框架中使用HTTP Client 4.2.6。 一些例子是這樣的代碼:

ProxyFactory.create(ITestService.class, baseUrl, new ApacheHttpClient4Executor(httpClient)); 

的問題是(意味着它是可再現),我用計劃類前的棄用contrutor註冊新的方案來阿帕奇「方案註冊表」

SchemeRegistry registry = new SchemeRegistry(); 

錯了 - >使用過時方案構造

registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), usedPort)); 

正確的方式

registry.register(new Scheme("http",usedPort,PlainSocketFactory.getSocketFactory()));