繁体   English   中英

服务器端针对云服务执行多个请求

[英]Server-side performing multiple requests against cloud services

我正在编写使用多个Web API的Web应用程序。 对于单个用户的单个请求,我的应用可能需要对其他站点执行最多30个HTTP请求。 该Web应用程序所在的网站可以有数百个并发用户。

我一直在四处寻找要使用哪个库。 我正在寻找一个成熟的项目,该项目具有详细的文档和经过测试的代码,这个项目将在未来几年内继续存在。 不知道是否存在类似的东西(!)

几个问题:

  1. 在上述情况下, 我应该使用异步HTTP客户端(无线程)还是常规(可能是池化的)HTTP客户端(有线程) 异步性使我的应用程序免于使用线程,但使代码更加分散-上面提到的请求数会给我的服务器带来过多负担吗? 这里说异步更具可扩展性)

  2. 常用的是哪个库? Apache HttpComponenets HttpClient还是它的异步couterpart HttpAsynchClient-在Alpha中...)? jfarcand的AsyncHttpClient怎么


好的,假设我将使用线程。 周围挖后,我认识到,一个servlet中产卵从线程(在我的情况-一个Struts动作),可能是一个大否否

相关问题:

在Tomcat中从Servlet产生线程的推荐方法是什么

需要Java Web应用程序设计的帮助来执行后台任务

我可以从Servlet产生线程吗?

我的看法是,这些是我的选择:

  1. 使用我自己的线程池 (容器不管理我的线程)
  2. 使用诸如CommonJ之类的WorkManager (似乎是无效产品)
  3. 使用诸如Quartz之类的第三方调度器 (可能是一个过大的杀伤力……?)

对于这个特定用例,我将不胜感激-汇总来自不同Web服务的lota数据(此汇总由单个用户的单个请求调用)。

好问题。 我将首先尝试异步解决方案,以了解一切如何工作。 异步解决方案将是最简单的实现。

如果那不起作用,请尝试使用更多线程的模型。

我将使用HttpClient发出您的请求。 我已经做了很多工作,并将其用于我需要做的任何http工作。

每个远程http连接使用一个线程,并使用同步http客户端可能会更容易。 我将首先尝试这种方法,看看它是否足够快速/可扩展。 对于同步方法,apache http客户端是一个不错的选择。

如果同步解决方案还不够好,那么像netty这样的东西可能会很合适。 它使用NIO,因此您不会获得数千个线程。

我不知道有任何现有软件可以帮您做到这一点。 但是您可以尝试拆分。 即,分开获取结果显示的数据。 由于您没有提供有关当前问题的更多详细信息,因此我无法为您说这是否可行。

基本上,这个想法是创建一个服务,该服务将为您获取这30个后续请求,并在可能的情况下将其处理为请求。 该服务的客户端是在Web上运行的服务。 它将接收到来自用户的请求,然后将其自己的请求放入您的数据服务中。 数据服务就绪后,它将返回响应。 同步或异步。

您可以使用任何所需的语言(甚至Java)对数据服务进行编程,而不必绑定到servlet,以确保Web服务器不会获取后续的30个请求并将它们组合为响应。 这也可以增强Web服务器本身的响应能力。

果壳 :``困难''任务的分支到一个专门的服务,您可以在其中透明地处理并行性。

我将使用Jetty ,在servlet中,我将使用延续机制来释放线程,同时等待第三方Web请求完成。 这将允许服务器上的最大并发,因为挂起的请求比线程多得多。

您可以使用延续或Servlet 3.0异步API,最终结果是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM