我正在编写使用多个Web API的Web应用程序。 对于单个用户的单个请求,我的应用可能需要向其他网站执行多达30个HTTP请求。网站应用程序可以拥有数百个并发用户。服务器端对云服务执行多个请求
我一直在四处寻找试图找出我应该使用哪个库。我正在寻找一个具有详细文档和测试代码的成熟项目,这个项目将在未来几年内完成。如果这样的事情存在,不知道
几个问题(!):
的情况下,如上述,我应该使用异步HTTP客户端(不穿),或常规(可能合并)HTTP客户端(带线程)?异步性使我的应用程序免于使用线程,但使代码更加分散 - 上述请求数量会给我的服务器造成太多负担吗? (它说here异步更具扩展性)
哪个库是常用的?它是Apache HttpComponenets HttpClient还是它的异步线程HttpAsynchClient - 这是在阿尔法...)? jfarcand的AsyncHttpClient怎么样?
好吧,让我们说,我将使用线程。 周围挖后,我认识到,一个servlet中产卵的线程(在我的情况 - 一个Struts动作),可能是一个大否否:
相关的问题:
What is recommended way for spawning threads from a servlet in Tomcat
Need help with java web app design to perform background tasks
Can i spawn a thread from a servlet ?
的方式I S ee值它,这是我的选择:(?可能是矫枉过正...)
- use my own thread pool(容器不管理自己的线程)
- use a WorkManager such as CommonJ(似乎是一个无效产品)
- use a 3rd party scheduler such as Quartz
我将不胜感激的任何建议为这一特定使用案例 - 聚合来自不同的Web服务lotsa数据(这种聚集是由单个用户的单个请求调用)。
在数以百计的用户发出30个请求时,异步就是要走的路,否则如果在线程上使用同步(阻塞)调用,则会有很多线程阻塞结果。 – 2011-04-19 17:42:51
@大卫,我同意你的意见。我认为从长远来看,异步是最好的选择。事实上,在对这个问题进行了一些思考之后,我会考虑将对远程站点的调用作为可以缓存来自这些外部站点的结果的持久层/存储的一部分。然后,持久层/存储可以基于特定策略来更新缓存。我们不知道每个网站需要哪些数据,以及这些数据如何重新整理并显示在特定网站上。也许通过javascript使用来自客户端的异步调用是最好的计划。 – hooknc 2011-04-19 18:07:56