播放异步WS API解释

时间:2014-04-11 15:44:06

标签: scala asynchronous playframework

我刚开始学习Play框架,到目前为止真的很喜欢它。 对我来说,只有一件事是不清楚的。我是Java开发人员,有阻止 和多线程的思维方式,所以异步编程对我来说有点新鲜。

因此,Play框架使用异步WS API,它不会阻止调用它的线程,也不会 它阻止或产生任何其他线程。通常你做一些异步编程 生成一个新线程,然后进行一个WS调用,这样你就不会阻塞你的主线程。所以我的问题是Play的WS API如何在不阻塞当前线程且不产生新线程的情况下对Web服务进行异步调用?如果Future对象中有可用的响应,它是否会每次检查一次请求然后主线程一次检查?我知道如何使用它,但我想知道什么是交易"引擎盖"。如何在Scala中实现?如果可能的话,一个简单的例子将是一个很好的帮助。

提前致谢和最诚挚的问候!

2 个答案:

答案 0 :(得分:5)

引擎盖下播放使用基于NIO的async-http-client。将调度请求,当服务器响应时,将在线程池的线程上执行回调(在这种情况下,将来完成)。这样就不会阻塞任何线程。

答案 1 :(得分:1)

Play使用"执行上下文",它通常是一个线程池,如documentation中所述:

  

了解哪些线程代码与期货一起运行非常重要。   在上面的两个代码块中,Plays默认值有一个导入   执行上下文。这是一个传递给的隐式参数   接受回调的未来API上的所有方法。执行   上下文通常等同于线程池,但不是   一定。

因此没有新的线程产生,但只是因为已经存在可用于此类工作的线程池。