与舞者同时为多个用户服务的方法

时间:2013-04-20 10:34:01

标签: multithreading webserver long-running-processes dancer

出于某种原因,我找不到下面问题的答案,可能是因为它太明显了。

在我与perl舞者的实验中,我添加了一条路线,它只能睡10秒然后返回一些东西。我这样做是为了模拟一个长时间运行的操作。我注意到,在这10秒钟内,舞者不会提出任何其他请求。我知道这是因为舞者是单线程的。

现在这种单线程方法显然不适合即使是要求苛刻的应用程序。所以我认为必须有一套既定的解决方案。但我似乎并不知道google的正确搜索字符串。

说清楚:我不介意,当初始化长时间运行操作本身的请求被阻止时。我想要的是所有其他请求都是服务的。

任何人都可以用

来启发我
  • Web服务器如何传统上处理长时间运行的操作,而不会阻止其他请求?
  • 每个会话都会有线程/进程,或者线程/进程可以按需生成,在我知道操作需要很长时间的情况下
  • 如何在进行多线程时保留会话信息,即当浏览器不总是与同一进程通信时?
  • 关于舞者的任何特别建议(随意推荐替代舞者)

1 个答案:

答案 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完成了对此的概念验证。