我使用Dancer2制作了一个Web应用程序。我需要在ajax请求上调用外部程序。问题是请求冻结,直到程序结束。我尝试了一些事情,比如使用&在systemcall和fork中,但它没有用。
以下是简化代码:
的Perl:
package Test::App;
use Dancer2;
our $VERSION = '0.1';
get '/' => sub {
template 'index';
};
get '/startscript' => sub{
my $pid = fork();
$SIG{CHLD} = 'IGNORE';
if($pid == 0) {
`sleep 10`;
exit 0;
}
};
get '/gettest' => sub{
return "test"
};
true;
的javascript:
$(document).ready(function() {
jQuery.get('/startscript', getSomething);
});
function getSomething(data){
jQuery.get('/gettest', getSomething);
console.log(data);
}
答案 0 :(得分:0)
旧问题,但是以下内容对我来说效果很好-使用&
使Shell在后台运行命令。这将立即将控制权返回给路由处理程序,并且该命令在后台运行。
Perl:
post '/run-slow-script-in-background' => sub {
my $slow_command = q{/full/path/to/slow/script --arg1 what --arg2 ever &};
system($slow_command);
};