Scala 播放异步WS-API

Scala 播放异步WS-API,scala,asynchronous,playframework,Scala,Asynchronous,Playframework,我最近才开始学习Play framework,到目前为止我非常喜欢它。 只有一件事我不清楚。我是一名Java开发人员,具有阻塞功能 多线程的异步编程思想对我来说有点新鲜 所以,Play框架使用异步WS-API,它不会阻止调用它的线程,也不会阻止调用它的线程 它阻止或生成任何其他线程。在进行异步编程时,通常 生成一个新线程,然后进行WS调用,这样就不会阻塞主线程。所以我这里的问题是Play的WS-API如何在不阻塞当前线程和不产生新线程的情况下对web服务进行异步调用?它是否触发一个请求,然后主线

我最近才开始学习Play framework,到目前为止我非常喜欢它。 只有一件事我不清楚。我是一名Java开发人员,具有阻塞功能 多线程的异步编程思想对我来说有点新鲜

所以,Play框架使用异步WS-API,它不会阻止调用它的线程,也不会阻止调用它的线程 它阻止或生成任何其他线程。在进行异步编程时,通常 生成一个新线程,然后进行WS调用,这样就不会阻塞主线程。所以我这里的问题是Play的WS-API如何在不阻塞当前线程和不产生新线程的情况下对web服务进行异步调用?它是否触发一个请求,然后主线程每隔一段时间检查一次未来对象中是否有可用的响应?我知道如何使用它,但我想知道“幕后交易”是什么。它将如何在Scala中实现?如果可能的话,举个简单的例子会很有帮助

提前感谢并致以最良好的问候

Play使用“执行上下文”,通常是线程池,如中所述:

了解哪些线程代码在futures上运行是很重要的。 在上面的两个代码块中,默认情况下有一个导入 执行上下文。这是传递给的隐式参数 未来API上接受回调的所有方法。行刑 上下文通常相当于线程池,但不是 当然


因此不会产生新的线程,只是因为已经有一个线程池可用于此类工作。

基于NIO的引擎盖下游戏使用。将发送一个请求,当服务器响应时,将在线程池中的线程上执行回调(在本例中为将来的完成)。这样就不必阻塞线程。

那么基本上这意味着主线程使用线程池中的线程来查询web服务?池中的线程是否会阻塞并等待web服务的响应?如果您必须占用一个等待响应的新线程,那么异步WS-client有什么意义呢?我认为drexin已经涵盖了这一点-回调是由较低级别的异步IO系统调用触发的(例如,Linux
select
/
poll
/
epoll
),这些调用由Java NIO库抽象而来,所以这并没有占用太多的线程。好吧,现在对我来说似乎有点清楚了。我不太明白的一点是,调用回调的线程如何知道,如果没有阻塞响应并等待响应,那么响应是可用的?它是否每隔一段时间检查一次是否有响应?比这要复杂一点。NIO提供选择器,用于监视事件的通道。一个线程可以通过这种方式监视多个通道,并在有数据要处理时将回调分派到线程池。@drexin此注释应该是答案的一部分。