出于某种原因,我找不到下面问题的答案,可能是因为它太明显了。
在我与perl舞者的实验中,我添加了一条路线,它只能睡10秒然后返回一些东西。我这样做是为了模拟一个长时间运行的操作。我注意到,在这10秒钟内,舞者不会提出任何其他请求。我知道这是因为舞者是单线程的。
现在这种单线程方法显然不适合即使是要求苛刻的应用程序。所以我认为必须有一套既定的解决方案。但我似乎并不知道google的正确搜索字符串。
说清楚:我不介意,当初始化长时间运行操作本身的请求被阻止时。我想要的是所有其他请求都是服务的。
任何人都可以用
来启发我答案 0 :(得分:2)
这将取决于Web服务器和底层操作系统 - 这里有关于Apache httpd的答案:What is Apache process model?
请注意,“开箱即用”的Dancer使用单线程的HTTP :: Server :: Simple,但这不是唯一的选择。有关一系列以Apache CGI开头的Dancer部署选项,请参阅https://metacpan.org/module/Dancer::Deployment,它将为您的Web服务器提供并发性。如果您正在使用* nix环境,那么生成一个分离的进程将很容易 - 而且在Win32上可能更难 - 但您可能需要通过除响应之外的其他机制(例如STOMP或websockets)将结果发送回客户端。另一种方法是从Dancer路由生成一个单独的长时间运行进程,立即将一些查找键返回到该路由中的客户端,然后在另一个路由上进行客户端轮询以完成该进程。也许答案是你需要一个可以处理并发请求的Dancer前面的Web服务器。
您的浏览器会将会话信息存储在cookie中,而Dancer会在服务器上存储相应的会话信息,而Dancer将匹配这些信息。这不能回答第三个问题,只是说不要担心。
如果除了并发/长时间运行流程问题之外,Dancer正在支持您的所有需求,那么听起来就像阅读您的Web服务器部署选项:https://metacpan.org/module/Dancer::Deployment可能会解决您的问题。请注意,如前所述,如果您使用的是* nix环境,那么基于Perl的并发Web服务器将有更多选项,但我相信这个问题也可以在Windows上解决。我们使用IIS + FastCGI完成了对此的概念验证。