2013-05-12 79 views
5

我的Java Play2应用正在调用一些外部Web服务以通过同步第三方客户端库获取数据。对于这个应用程序,我需要高流量和可扩展性。Play 2:play.libs.WS VS异步处理的第三方客户端库

播放文件说:

情况下,当你的代码可能会阻止包括: 通过第三方客户端库(即不 使用Play的异步WS API) [使用REST/WebService的API的...]

请注意,您可能会试图将您的封锁代码封装在期货中。 这并不能使它非阻塞,它只是意味着阻塞会在不同的线程发生[...]

相比之下,以下类型的IO不阻止: 的播放WS API, ...

在Play2 Java应用程序中,使用promise来使事物异步并不是很有用,因为默认播放池用于Futur任务。因此,使用大量Futur的结果与仅使用具有大型默认线程池的同步调用的结果相同:同一个池中的线程数大致相同。

所以我的问题是:

  • 是在Java API中的play.libs.WS API真的异步(不阻塞在剧中默认池任何线程)?
  • 应该我总是用它,而不是我的第三方客户端库,如果我想高流量和可扩展性
  • 什么是play.libs.WS API使用的线程池,我应该增加它的大小,如果我的应用做了很多一个WS电话?
  • 有没有一种方式可以像play.libs.WS API那样通过包装第三方同步客户端来实现异步?

非常感谢

卢瓦克

+0

看看代码,play.libs.WS似乎使用Netty池(使用AsyncCompletionHandler ) 对吗? – Loic 2013-05-13 10:34:50

回答

1

由于纪尧姆BORT播放邮件列表上说,play.libs.WS API“都有自己的线程池,由AsyncHttp库本身管理,但因为它在底层使用了NIO,所以它并不重要,因为它基本上是非阻塞的。“

所以它应该尽可能经常使用。