Playframework 重头戏2:Play.libs.WS与用于异步处理的第三方客户端库

Playframework 重头戏2:Play.libs.WS与用于异步处理的第三方客户端库,playframework,playframework-2.0,Playframework,Playframework 2.0,我的Java Play2应用程序正在调用一些外部web服务,以通过同步第三方客户端库获取数据。对于这个应用程序,我需要高流量和可扩展性 播放文档显示: 代码可能阻塞的情况包括: 通过第三方客户端库使用REST/WebService API 使用Play的异步WS-API) [……] 请注意,您可能因此想在将来包装您的阻塞代码这并不意味着它是非阻塞的,它只是意味着阻塞将在不同的线程中发生[…] 相反,以下类型的IO不会阻塞: 播放WS-API 在Play2 Java应用程序中,使用承诺使事情异步并

我的Java Play2应用程序正在调用一些外部web服务,以通过同步第三方客户端库获取数据。对于这个应用程序,我需要高流量和可扩展性

播放文档显示:

代码可能阻塞的情况包括: 通过第三方客户端库使用REST/WebService API 使用Play的异步WS-API) [……]

请注意,您可能因此想在将来包装您的阻塞代码这并不意味着它是非阻塞的,它只是意味着阻塞将在不同的线程中发生[…]

相反,以下类型的IO不会阻塞: 播放WS-API

在Play2 Java应用程序中,使用承诺使事情异步并没有真正的用处,因为默认的播放池用于将来的任务。因此,使用大量Futur的结果将与只使用具有大型默认线程池的同步调用的结果相同:相同池中的线程数量大致相同

因此,我的问题是:

  • Java API中的play.libs.WS API真的是异步的吗(不阻塞play默认池中的任何线程)
  • 如果我想要高流量和可扩展性,我应该总是使用它而不是我的第三方客户端库吗
  • play.libs.WS API使用的线程池是什么?如果我的应用程序执行大量WS调用,我应该增加它的大小吗
  • 有没有一种方法可以像play.libs.WS API一样异步,将第三方同步客户机包装在futures中
非常感谢


正如Guillaume Bort在Play邮件列表中所说,Play.libs.WS API“有自己的线程池,由AsyncHttp库自己管理,但由于它在后台使用NIO,这并不重要,因为它基本上是非阻塞的。”


因此,应该尽可能多地使用它。

查看代码,play.libs.WS似乎使用Netty池(使用AsyncCompletionHandler),对吗?