-3

如何为 PSGI 应用程序提供许多并发连接?我尝试过基于事件和预分叉的网络服务器,但并发连接的数量似乎受到工作进程数量的限制。我听说例如 Node.js 可以扩展到数千个并行连接,你能在 Perl 中实现类似的连接吗?

这是一个使连接无限打开的示例应用程序。关键不是要有无限的连接,而是要保持连接打开足够长的时间以达到连接限制:

my $app = sub {
  my $env = shift;
  return sub {
    my $responder = shift;
    my $writer = $responder->(['200', ['Content-Type' => 'text/plain' ]]);
    my $counter=0;
    while (1);   
      $writer->write(++$counter."\n");
      sleep 1; # or non-blocking sleep such as Coro::AnyEvent::sleep
    }
    $writer->close;
  };
};
4

2 回答 2

1

我认为您不应该在应用程序内有无限循环,我认为您应该只设置一个循环计时器,并在该计时器中通知/消息/写入...参见Plack::App::WebSocket - WebSocket 服务器作为 PSGI 应用程序Re^4:Mojolicious WebSockets 的实时输出?

于 2015-05-04T01:56:49.130 回答
0

虽然我还没有尝试过,但我在寻找使用套接字服务器报告长期运行作业的进度等时遇到的问题的解决方案时遇到了这个问题。最初,我正在考虑一种类似于ParallelUserAgent的方法,除了作为服务器而不是客户端。几天后,在意识到Net::WebSocket::Server如果新连接处理程序回调中的一个长时间运行的代码块会阻止新的连接请求后,又回到了这个问题。我的下一个方法是将长时间运行的功能拆分到一个新生成的 shell 进程中,并使用数据库来跟踪进度,然后可以在服务器内根据需要访问该进度,而无需长时间阻塞。

以为我会放弃我的方法,以防它帮助任何人走类似的道路。

于 2016-09-21T12:04:53.543 回答