我使用较新版本的Apache HTTP客户端(以前是3.x,现在是4.x)更改了实现我的问题是,一系列4个不同GET请求中的第一个HTTP请求占用了大量时间比下面的要长。如果在每个请求序列之间暂停60秒,则此问题是可再现的。下面是我的一个简单基准测试的结果。服务器代码保持不变,请求也始终相同。我认为问题是客户端内部的某些东西在未使用和重新创建后被破坏如果有人知道我可以配置什么来避免这种糟糕的性能,那将是有帮助的。
Apache HTTP Client 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
提前非常感谢
Shane
非常感谢。更确切地说,我在Resteasy 3.0.9框架中使用HTTP客户端4.2.6。下面的代码就是一个例子:
ProxyFactory.create(ITestService.class, baseUrl, new ApacheHttpClient4Executor(httpClient));
问题是(意味着它是可复制的),在向apache"Scheme Registry"注册新方案之前,我使用了Scheme类的一个不推荐使用的控制器
SchemeRegistry registry = new SchemeRegistry();
错误->使用不推荐使用的Scheme构造函数
registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), usedPort));
正确的方式
registry.register(new Scheme("http",usedPort,PlainSocketFactory.getSocketFactory()));