5
Mojolicious perl 코드에서 나는 원격 클라이언트에서 생성되고 감시되는 작업을 처리합니다.다른 경로를 다루기위한 Mojolicious의 전역과 스레드
전 세계 변수 인 해시 배열로 작업을 유지합니다.
PUT '/ job/create'및 GET '/ job/status'의 핸들러에서 사용됩니다. PUT '/ job/create'로 새 작업을 추가 할 때 어레이는 서브 루틴 (아래 코드에서 4 개 요소 포함), 을 확장하지만 GET '/ job/status'를 통해 작업의 상태를 요청할 때, 작업 목록에 배열에 추가 된 요소가 없습니다 (2 요소). hypnotoad 스레드, 포크를하지 사용하는 한,
#!/usr/bin/perl -w
use threads;
use threads::shared;
use Mojolicious::Lite;
use Mojo::JSON;
my (%record, %job1, %job2, %job3, @jobs) : shared;
%job1 = (id=>"id1");
%job2 = (id=>"id2");
%job3 = (id=>"id3");
push (@jobs, \%job1);
push (@jobs, \%job2);
app->config(hypnotoad => {listen => ['http://*:3000']});
put '/job/create' => sub {
my $self = shift;
my $obj = Mojo::JSON->decode($self->req->body);
my $id = $obj->{id};
%record = (id => $id);
push (@jobs, \%record); # test the global prefilled
push (@jobs, \%job3); # test the global locally filled
$self->render(text => "Created job id $id. Jobs count: " .
$#jobs);
};
get '/job/status' => sub {
my $self = shift;
my $out = "[";
for(my $i=0; $i<$#jobs+1; $i++) {
$out .= "{id:\"" . $jobs[$i]{id} . "\",";
$out .= "," if $i<$#jobs;
}
$out .= "]";
$self->render(text => "allJobsInfo($out). Num jobs: " . $#jobs);
};
app->start();
도움 주셔서 감사합니다. 결국 CouchDB를 사용하여 솔루션으로 이동했습니다. 꽤 좋은 btw 보인다. :) –
'perl your.app daemon -l'http : // * : 3000''도 작동 할 수 있습니다. [내장 웹 서버 참조] (http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Built2Din_web_server) – klekker