Multithreading 使用dancer同时服务多个用户的方法

Multithreading 使用dancer同时服务多个用户的方法,multithreading,webserver,long-running-processes,dancer,Multithreading,Webserver,Long Running Processes,Dancer,出于某种原因,我找不到下面这个问题的答案,可能是因为它太明显了 在我使用perl dancer进行的实验中,我添加了一个路由,该路由只需休眠10秒,然后返回一些内容。我这样做是为了模拟长期运行的操作。我注意到,在这10秒钟内,舞者不会提出任何其他要求。我知道这是因为舞者是单线程的 现在,这种单线程方法显然不适用于要求不高的应用程序。所以我相信一定有一些既定的解决方案。但我似乎不知道谷歌搜索的正确字符串 说清楚一点:我不介意,当初始化长时间运行的操作本身的request被阻塞时。我想要的是所有其他

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

在我使用perl dancer进行的实验中,我添加了一个路由,该路由只需休眠10秒,然后返回一些内容。我这样做是为了模拟长期运行的操作。我注意到,在这10秒钟内,舞者不会提出任何其他要求。我知道这是因为舞者是单线程的

现在,这种单线程方法显然不适用于要求不高的应用程序。所以我相信一定有一些既定的解决方案。但我似乎不知道谷歌搜索的正确字符串

说清楚一点:我不介意,当初始化长时间运行的操作本身的request被阻塞时。我想要的是所有其他的请求都能得到满足

有谁能告诉我一些关于

  • Web服务器传统上如何处理长时间运行的操作,而不阻塞其他请求
  • 在我知道操作需要很长时间的情况下,每个会话是否有线程/进程,或者线程/进程是否可以按需生成
  • 当使用多线程时,即当浏览器不总是与同一进程对话时,会话信息是如何保留的
  • 任何关于舞者的特别建议(请随意推荐舞者的替代品)
      • 这将取决于web服务器和底层操作系统-这里有一个关于Apache httpd的答案:

      • 请注意,“开箱即用”舞者使用HTTP::Server::Simple,它是单线程的,但是,这不是唯一的选项。请参阅以Apache CGI为起点的一系列舞者部署选项,这些选项将为您的web服务器提供并发性。如果您在*nix环境中工作,则生成分离进程将很容易,也很难,但在Win32上是可能的,但您可能需要通过http响应以外的其他机制(如STOMP或WebSocket)将结果发送回客户端。另一种方法是从Dancer路由生成一个单独的长时间运行的进程,立即向该路由中的客户端返回一些查找密钥,然后让客户端在另一个路由上轮询以完成该进程。也许答案是,在Dancer前面需要一个web服务器,它可以处理并发请求

      • 您的浏览器将在cookie中存储会话信息,Dancer将在服务器上存储相应的会话信息,Dancer将匹配这些信息。这并没有回答第三个问题,只是说别担心

      • 如果Dancer支持除并发性/长时间运行流程问题之外的所有需求,那么听起来就像是在阅读web服务器部署选项:可能会解决您的问题。请注意,与以前一样,如果您在*nix环境中,您将在基于Perl的并发web服务器方面有更多的选择,但我相信这个问题也可以在Windows上解决。我们使用IIS+FastCGI完成了这方面的概念验证