如何获得Perl';s HTTP::Daemon是否接受多个连接?

如何获得Perl';s HTTP::Daemon是否接受多个连接?,perl,http,daemon,Perl,Http,Daemon,我使用HTTP::Daemon进行了一些测试: use HTTP::Daemon; use HTTP::Status; my $d = HTTP::Daemon->new || die; print "Please contact me at: <URL:", $d->url, ">\n"; while (my $c = $d->accept) { while (my $r = $c->get_request) { if ($r->me

我使用HTTP::Daemon进行了一些测试:

use HTTP::Daemon;
use HTTP::Status;

my $d = HTTP::Daemon->new || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
  while (my $r = $c->get_request) {
      if ($r->method eq 'GET') {
          # do some action (about 10s)
      }
      else {
          $c->send_error(RC_FORBIDDEN)
      }
    }
  $c->close;
  undef($c);
}
使用HTTP::Daemon;
使用HTTP::Status;
我的$d=HTTP::Daemon->new | | die;
打印“请通过以下地址与我联系:\n”;
而(我的$c=$d->接受){
while(my$r=$c->get\u请求){
如果($r->method eq'GET'){
#做一些动作(大约10秒)
}
否则{
$c->发送错误(禁止使用RC)
}
}
$c->close;
基金(c美元);
}
它工作正常,但如果我在10秒内执行更多请求,请求就会排队(我通过$d->accept获得所有请求)

我想要的是:如果一个客户端启动了一个请求,那么其他任何客户端都不应该排队。
我尝试了倾听选项,但没有成功


有什么建议吗?

HTTP::Daemon不适合您,并明确地告诉您

此HTTP守护进程不为您提供fork(2)。你的申请,即 “HTTP::Daemon”的用户负责分叉(如果是这样的话) 可取的。还请注意,用户负责生成 符合HTTP/1.1协议的响应


如果你的回答时间太长,请用叉子回答。或者使用另一个模块。

HTTP::Daemon不会为您分叉,并明确地告诉您这一点

此HTTP守护进程不为您提供fork(2)。你的申请,即 “HTTP::Daemon”的用户负责分叉(如果是这样的话) 可取的。还请注意,用户负责生成 符合HTTP/1.1协议的响应


如果你的回答时间太长,请用叉子回答。或者使用另一个模块。

这里有一个线程;它可以处理第一个请求,也可以处理下一个请求。在控件返回到accept之前,您无法处理新请求。

这里有一个线程;它可以处理第一个请求,也可以处理下一个请求。在控件返回到accept之前,您无法处理新请求。

我不想分叉-没关系。但在生成答案的过程中,我不希望后续请求排队。那么,您希望它们发生什么情况呢?在本文中,“忽略”仍然有点模糊。从某种意义上说,您的代码已经忽略了并发连接:在它们到达队列前面之前,它不会对它们做任何特定的操作。除非您愿意更深入地研究tcp,否则做一些特定的事情意味着为它编写代码,并在处理前一个查询时运行该代码,否则您需要多任务处理。因此分叉。在循环中处理请求后,您可以使用$c->force_last_request,这为我解决了问题。我不想分叉-这没关系。但在生成答案的过程中,我不希望后续请求排队。那么,您希望它们发生什么情况呢?在本文中,“忽略”仍然有点模糊。从某种意义上说,您的代码已经忽略了并发连接:在它们到达队列前面之前,它不会对它们做任何特定的操作。除非您愿意更深入地研究tcp,否则做一些特定的事情意味着为它编写代码,并在处理前一个查询时运行该代码,否则您需要多任务处理。因此forking.you可以使用$c->force\u last\u request在循环中处理请求之后,这为我解决了问题。