【问题标题】:Fastest way to retrieve Http response status in Java在 Java 中检索 Http 响应状态的最快方法
【发布时间】:2012-05-18 09:51:55
【问题描述】:

我正在做一些研究和基准测试,以便从 Http 响应中获取状态代码。

我需要使用尽可能快的方式从大量站点列表中获取响应状态代码,我不能在多个线程中运行,这将在批处理中工作,这是一个必要条件。

我创建了一个小基准服务,可以多次发送请求(避免站点缓存)并检索时间统计​​信息。

我正在使用不同的客户端和 API 进行测试,但响应时间不够好(最少 200 毫秒,平均:300 - 400 毫秒)。

我使用 Java URLConnection、SpringRestTemplate、ApacheHttpCommons、GoogleHttpClient 和 Restlet 进行测试。 我发现的一个问题是,在其中一些中我不能只请求 HEAD 然后检索状态 sode,所以我选择了完整的响应。

我也在考虑套接字和脚本。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么“在批处理中工作”意味着您不能使用多个线程?你试过 java.net.HttpURLConnection 吗?
  • 对不起,我不知道批处理背后的逻辑,它是为我的公司准备的,我不在那个项目中。他们只要求我必须在没有多线程的情况下进行测试。在此之前,我在考虑线程池和多个连接。
  • 那我会问他们为什么。多线程这当然是最快的方式,除非他们希望你使用 NIO,在这种情况下他们应该这么说,以及为什么。

标签: java spring http rest httpresponse


【解决方案1】:

相对于那些缓慢的响应时间(可能是 99% 的网络延迟 - 特定的 HTTP 库不太可能产生太大影响),缺少线程是一个更大的问题。

您可以尝试http://mina.apache.org/asyncweb/,它基于 Java NIO,因此是非阻塞的,但它可能会在后台创建线程。

【讨论】:

  • 好的,我要试试这个。
  • 我也试过 apache MINA、jboss Netty 和 Ning Asynchronous HTTP Client。更好的结果是使用 URLConnection、Apache Http 组件和带有 URL 连接实现的 Google Http 客户端 (NetHttpClient)。但没有我们预期的那么好。
  • 是的,但是您正确使用 mina 吗?您需要并行设置一堆请求,然后轮询它们的结果。因为它是异步的,所以应该可以在单个线程中实现。
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2019-09-19
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多