问题是关于Play框架,尽管概念是通用的。我想被阻止的客户端正在侦听一个在服务器端跟踪并通过Future [Result]传递的套接字,这样当Future完成时,响应将写入套接字然后套接字关闭。
有人可以用引用分享更具体的解释吗?
引用自:
https://www.playframework.com/documentation/2.6.18/ScalaAsync
在等待响应时将阻止Web客户端,但服务器上不会阻止任何内容,并且可以使用服务器资源为其他客户端提供服务。
Future
中编码的所有工作,并将其交给不久的将来某个时刻完成(它可能是完成Future的不同线程,或者它甚至可能最终都是相同的线)。关键是Future的创建很快,因此处理请求的线程会快速返回到池中,因此它可以获取另一个要处理的请求。如果您已经听说过Reactive Programming,那么这基本上就是保持应用程序响应的想法。
在等待响应时将阻止Web客户端,但服务器上不会阻止任何内容,并且服务器资源可用于为其他客户端提供服务。
因此客户端可能会在等待响应通过它的套接字返回时被阻塞(除非它也进行异步调用),但是想法是在Play中处理请求的线程池不会因为他们创建一个未来的方式,并将完成这个回到Play,这样他们就可以回去处理其他请求了。还有一点,但希望这给Play的文档中的特定语句提供了更多的上下文。