1

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

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

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

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

任何人都可以请教我

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

1 回答 1

2
  • 这将取决于 Web 服务器和底层操作系统 - 这里有一个关于 Apache httpd 的答案:什么是 Apache 进程模型?

  • 请注意,“开箱即用”的 Dancer 使用 HTTP::Server::Simple,它是单线程的,但是,这不是唯一的选择。见https://metacpan.org/module/Dancer::Deployment从 Apache CGI 开始的一系列 Dancer 部署选项,将为您的 Web 服务器提供并发性。如果您在 *nix 环境中工作,生成一个分离的进程将很容易 - 并且更难但在 Win32 上可能 - 但您可能需要通过 http 响应以外的其他机制将结果发送回客户端(例如 STOMP 或 websockets) . 另一种方法是从 Dancer 路由生成一个单独的长时间运行的进程,立即在该路由中向客户端返回一些查找键,然后让客户端轮询另一条路由以完成该过程。也许这个问题的答案是你需要在 Dancer 前面有一个可以处理并发请求的 Web 服务器。

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

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

于 2013-04-21T00:13:07.833 回答