我正在使用 Mojolicious(完整版,不是精简版)和 hypnotoad 来提供内部 API。
我正在寻找一种方法来将一些输出发送到连接,当工作线程超时时,这些连接将被关闭。
目标是能够通知客户工人已被停止。
我已经尝试了析构函数、END块以及在控制器内处理STOP、QUIT等信号,但没有成功(我猜当工人死亡时为时已晚)。
所以我尝试使用以下代码,虽然我可以查看工作人员何时停止,但接下来我不知道如何从这些钩子发送任何输出。
package MyApi;
use Mojo::Base 'Mojolicious', -signatures;
use Mojo::Server::Hypnotoad;
# This method will run once at server start
sub startup ($self) {
# Load configuration from config file
my $config = $self->plugin('NotYAMLConfig');
# Configure the application
$self->secrets($config->{secrets});
$self->hook(before_server_start => sub ($server, $app) {
$server->on(reap => sub ($prefork, $pid) {
print "Closing worker $pid on reap event\n";
});
$server->ioloop->on(finish => sub {
my $loop = shift;
print "Closing worker $$ on finish event\n";
});
});
$self->app->config(hypnotoad => {
listen => ['http://*:2003'],
workers => $ENV{HYPNOTOAD_WORKERS} // 10,
inactivity_timeout => 40,
heartbeat_timeout => 40,
heartbeat_interval => 5,
graceful_timeout => 5,
clients => 1, # 1 worker 1 client
accepts => 200
});
# Load the "api_nationals.yml" specification
$self->plugin(
"OpenAPI" => {
url => $self->home->rel_file("api_nationals.yml")
}
);
}
任何想法或建议都欢迎,谢谢!