gpt4 book ai didi

perl - 如何正确关闭 Mojolicious::Lite 服务器?

转载 作者:行者123 更新时间:2023-12-01 11:39:29 27 4
gpt4 key购买 nike

在 Mojolicious::Lite 应用程序中,我有一个路由,我想终止服务器并重定向到另一个站点。这是片段。

my $me = $$;
get '/kill' => sub {
my $self = shift;
$self->res->code(301);
$self->redirect_to('http://www.google.com');
$self->app->log->debug("Goodbye, $name.");

# I need this function to return so I delay the kill a little.
system("(sleep 1; kill $me)&");
};

这段代码做了我想要的,但感觉不对。我试过 $self->app->stop 但这不可用。

我应该使用适当的技术来访问服务器吗?

尼基

最佳答案

2021 年更新:
最近在 IRC 讨论中提到了这个答案,因此有必要进行更新。下面的回复是我在一个非常具体的案例中使用的机制。虽然在极少数情况下它可能仍然有用,但停止服务的更正确方式是
https://docs.mojolicious.org/Mojo/IOLoop#stop_gracefully
https://docs.mojolicious.org/Mojo/Server/Daemon#SIGNALS对于单进程服务器或 https://docs.mojolicious.org/Mojo/Server/Prefork#MANAGER-SIGNALS用于预 fork

原来的:
当然,有几种方法可以做到这一点。
可能最好的方法是简单地将完成处理程序附加到事务:

#!/usr/bin/env perl

use Mojolicious::Lite;

get '/kill' => sub {
my $c = shift;
$c->redirect_to('http://google.com');
$c->tx->on( finish => sub { exit } );
};

app->start;
最像你的例子的方法是设置一个 Mojo::IOLoop timer这将等待几秒钟并退出。
#!/usr/bin/env perl

use Mojolicious::Lite;
use Mojo::IOLoop;

get '/kill' => sub {
my $c = shift;
$c->redirect_to('http://google.com');
my $loop = Mojo::IOLoop->singleton;
$loop->timer( 1 => sub { exit } );
$loop->start unless $loop->is_running; # portability
};

app->start;

关于perl - 如何正确关闭 Mojolicious::Lite 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com