Perl Mojolicious:是否可以在工作线程因超时而被迫关闭以将输出发送到连接的客户端之前执行代码?

问题描述 投票:0回答:0

我正在使用 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")
        }
    );

}

任何想法或建议都欢迎,谢谢!

perl mojolicious hypnotoad
© www.soinside.com 2019 - 2024. All rights reserved.