Можно ли выполнить код до того, как рабочий процесс будет вынужден закрыться на время ожидания для отправки вывода подключенным клиентам?
Я использую 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")
}
);
}
Любая идея или предложение приветствуются.