Play框架如何跟踪被阻止的客户端并返回响应

问题描述 投票:0回答:1

问题是关于Play框架,尽管概念是通用的。我想被阻止的客户端正在侦听一个在服务器端跟踪并通过Future [Result]传递的套接字,这样当Future完成时,响应将写入套接字然后套接字关闭。

有人可以用引用分享更具体的解释吗?

引用自:

https://www.playframework.com/documentation/2.6.18/ScalaAsync

在等待响应时将阻止Web客户端,但服务器上不会阻止任何内容,并且可以使用服务器资源为其他客户端提供服务。

scala tcp playframework blocking
1个回答
0
投票
  1. 请注意,Play不管理如何寻址客户端。这是由TCP管理的。基本上(作为一个简单的类比),您可以将客户端(如Web浏览器)视为对服务器进行电话呼叫。当客户端发出请求时,其中一个套接字连接到服务器上的特定套接字 - 这是套接字在请求/响应期间的持久连接。 Play的底层服务器(旧版本的Netty或v2.6 +的Akka Http)将接受来自套接字的传入请求并为其分配一个线程。 Play将完成工作,生成的Response将被服务器映射回正确的套接字。 TCP服务器将管理响应和套接字之间的映射,而不是Play。
  2. 正如其他人所指出的那样,阻塞的提法基本上与Play Action的工作方式有关(非阻塞)。他们接受请求,包装你在Future中编码的所有工作,并将其交给不久的将来某个时刻完成(它可能是完成Future的不同线程,或者它甚至可能最终都是相同的线)。关键是Future的创建很快,因此处理请求的线程会快速返回到池中,因此它可以获取另一个要处理的请求。如果您已经听说过Reactive Programming,那么这基本上就是保持应用程序响应的想法。 在等待响应时将阻止Web客户端,但服务器上不会阻止任何内容,并且服务器资源可用于为其他客户端提供服务。 因此客户端可能会在等待响应通过它的套接字返回时被阻塞(除非它也进行异步调用),但是想法是在Play中处理请求的线程池不会因为他们创建一个未来的方式,并将完成这个回到Play,这样他们就可以回去处理其他请求了。

还有一点,但希望这给Play的文档中的特定语句提供了更多的上下文。

© www.soinside.com 2019 - 2024. All rights reserved.