我对Cro如何处理客户端请求感到有点困惑,特别是为什么某些请求似乎会导致Cro的内存使用量急剧膨胀。
这方面的一个很小的例子出现在字面意思是“你好世界!”Cro服务器中。
use Cro::HTTP::Router;
use Cro::HTTP::Server;
my $application = route {
get -> {
content 'text/html', 'Hello Cro!';
}
}
my Cro::Service $service = Cro::HTTP::Server.new:
:host<localhost>, :port<10000>, :$application;
$service.start;
react whenever signal(SIGINT) {
$service.stop;
exit;
}这个服务器所做的就是用"Hello!“来响应GET请求--这当然不应该费钱。然而,如果我导航到localhost:10000,然后快速刷新页面,我注意到Cro的内存使用量开始上升(然后保持高位)。
这似乎只有在刷新迅速时才会发生,这意味着该问题可能与不正确关闭连接或与并发问题(可能与之相关的先前问题)有关。
为了简单起见,这个"Hello“服务器是否省略了一些性能技术或最佳实践?还是我遗漏了其他关于Cro设计如何工作的东西?
发布于 2022-05-10 12:48:28
processing处理管道是一个由supply块组成的链,请求以及随后的响应都会通过。关于要创建的处理线程的最佳数量的决定由Raku ThreadPoolScheduler实现决定。
就连接生存期而言,取决于客户端--即web浏览器--如何关闭连接;如果浏览器使用保持活动的HTTP/1.1连接或保留HTTP/2.0连接,Cro会尊重该请求。
关于内存的使用,增长到一定程度并不令人惊讶;只有当它最终没有稳定下来时,它才是一个问题。原因包括:
https://stackoverflow.com/questions/72180995
复制相似问题