2012-02-23 43 views
5

在我Mojolicious Perl代碼我處理創建,並從遠程客戶端觀看了工作。全局和論壇中的Mojolicious處理不同的路徑

保持我的工作崗位陣列哈希,這是一個全局變量英寸

它,然後在PUT的處理程序使用「/任務/創建」和GET「/工作/狀態」。 當添加與PUT新作業「/工作/創建」陣列得到 延伸在子程序(它包含在下面的代碼4種元素), 但經由GET狀態‘/作業/狀態請求作業時’的 作業的列表,陣列不包含添加元素(它計數2種 元件)。

謝謝,揚

下面是代碼:

#!/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(); 

回答

6

這將沒有真正的工作,爲hypnotoad是使用叉子,不是線程。我建議將數據存儲在數據庫或Cache::FastMmap之類的東西中。

+0

感謝您的幫助。最後,我轉向使用CouchDB的解決方案。看起來很不錯btw。 :) – 2012-03-01 17:45:40

+0

備選'perl your.app守護進程-l'http:// *:3000''也可以工作。 [請參閱內置Web服務器](http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Built2Din_web_server) – klekker 2012-07-13 16:19:44