前回の記事に続いてMojoliciousでWebSocketの実験です。
前回はWebSocketではなく、まずMojoliciousでHTTP鯖の実験だったので、今回がその1です。
今後も何回かMojoliciousでWebSocketの実験していくと思います。
HTTPはブラウザがそのまま表示できますんでクライアントの作成は必要ありませんが、
今回はクライアントとサーバーの作成。
クライアントからサーバーに送信して、
サーバーは何も応答せずにコンソールに受信メッセージをprintするだけの、
チャットサーバーやエコーサーバーにも満たない超初歩な実験です。
ws2.pl (サーバー側)
#!/usr/bin/perl
use Mojolicious::Lite;
websocket '/' => sub{
my $self=shift;
$self->on(message => sub{
my $self=shift;
my $mes=shift;
print "$mes\n";
});
};
app->start;
index.html (クライアント側)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
var WS=new WebSocket("ws://127.0.0.1:3000/");
</script>
<button onclick="WS.send('test')">送信</button>
</body>
</html>
ws2.plの場所に移動して、
./ws2.pl daemon
で実行するとport3000で待ち受けとなる。
クライアント側のindex.htmlはボタンを1個表示して、ボタンを押すと 'test' と文字列を送信するだけ。
WebSocketの接続完了前に送信しちゃダメだから、
ホントはWebSocketオブジェクトのonopenイベントを待たなければいけないようだが、省略。
クライアント側は、onopen以外にもonmessageとかイベントがあるんで、イベント発生時に処理する感じで作るみたい。
ページ上のボタン押せば、
ws2.pl を実行してる鯖のコンソールに 'test' と表示されるだけ。
次回はエコーサーバーの実験をやってみて、その次にチャットサーバーの実験かね。
あと、実際に運用するとなるとログを保存したいが、
わざわざモジュール使わんでもいいかもしれんけど、Mojo::Log ってのがあるんでそれ使うかね。