WEBサイトの製作、管理、とかの日記ブログです。

<<   2023年08月   >>
SunMonTueWedThuFriSat
  12345
6789101112
13141516171819
20212223242526
2728293031  
新着記事
カテゴリ
過去ログ
コメント
検索
Mojoliciousちょい入門・・・
WebSocket試したいんで、Mojoliciousをちょっと触ってみる。
Ubuntu 12.04 のリポジトリから入れたんだが、バージョンが2.23-1なんで、CPANのやつよりも古い。
バージョンの違いでハマることがないといいんだが・・・
公式リポジトリ以外からなにかインストールとかはしたくないんで・・・
とりあえずMojolicious::Lite使う。

ws1.pl
#!/usr/bin/perl

use Mojolicious::Lite;
get '/:foo' => sub {
    my $self = shift;
    my $foo  = $self->param('foo');
    $self->render(text => "Hello from $foo!");
};
app->start;
Mojoliciousの説明ページにあったコードほぼそのまま。
まずはHTTPでテキスト返すだけ。
スクリプトを置いた場所に移動して、
./ws1.pl daemon
起動して待ち受け状態になる。
標準ではport 3000になるんで、
http://127.0.0.1:3000/
がサーバーアドレスになる。

個人的には、このコードの書き方わかりにくいんだが、
#!/usr/bin/perl

use Mojolicious::Lite;
get('/:foo',sub{
    my $self = shift;
    my $foo  = $self->param('foo');
    $self->render(text => "Hello from $foo!");
});
app->start;
こんな書き方と同じ事だね。
use Mojolicious::Lite;
で関数が色々使えるようになって、
getの1番目の引数にサーバー上の対象パス、2番目の引数にサブルーチン。
サブルーチンを直接書かずに、別のところにサブルーチンを作って2番目の引数にサブルーチンのリファレンスを渡しても同じように機能した。

まず、getはHTTPのGET限定で1番目の引数とパスが一致した場合に2番目のサブルーチンが処理される感じの関数で、イベントを設定する感じだね。
同様にpostとかもある。

1番目の引数は対象パスだが、
'/:foo' の「:」 はプレースホルダって機能で、ワイルドカード的なもん。0文字には一致しないぽい。
「.」「/」には一致しないようで、全ての文字に一致するワイルドカードプレースホルダって機能もある。
「:」のない文字列だと静的なパスに対応する。
最初のテストはプレースホルダ使わんで静的パスでやったほうがわかりやすかったかな。
プレースホルダでワイルドカード的なアドレスを受け取った場合、
Mojolicious::Controller の param('foo')で取り出せる。paramは引数なしだと名前の配列を返すぽい。

2番目の引数は対象アドレスに接続された場合の処理のサブルーチンだが、
Mojoliciousのオブジェクト?が渡されていろいろできる。
my $foo  = $self->param('foo');
でアドレスのプレースホルダ部分を取得。
$self->render(text => "Hello from $foo!");
は、"Hello from" にプレースホルダから取得した変数をつけて出力する。手元ではtext/htmlで返された。
一番目の引数によって2番目以降の引数も変わってくるぽいが、詳細な説明が見つからない・・・どこかにあるとは思う。

app->start;
でサーバーとして待機するのかな。


まあ、こんな感じでHTTP鯖は問題なく動いた。
簡単だし、Apacheとか普通のHTTP鯖使わずにPerlだけでHTTP鯖使うのにも使えそうだね。
そんな機会もないと思うけどw

引き続き、WebSocketの方も実験したい。
この記事へのコメント
名前:
URL
コメント:
この記事へのトラックバック :
whblog 1.7