鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Mojoliciousでshutdown処理

マルチプロセスの環境でMojolisiousが動くとき、 Redisのなかに、プロセスを跨るデータを保持させるようにした場合。 ワーカープロセスが落ちた時、Redisのデータもお掃除して あげないとゴミが残ってしまう。

具体的に言うと、開設されたチャットルームの情報をRedisで管理 しているんですが、Mojoliciousを落としたとき、Redisの情報も 一緒にデリートしたい。 ENDブロックに書いていけばとりあえず動きそうな予感がする。

#!/usr/bin/env perl
use Mojolicious::Lite;
use Data::Dumper;

# Documentation browser under "/perldoc"
plugin 'PODRenderer';

my $clients ={};

get '/:id' => sub {
  my $self = shift;
  my $id  = $self->param('id');
  $clients->{$id} = 1;
  $self->render('index');
  
};

END{
  app->log->debug(Dumper($clients));
 # delete redis data here !!
}

app->start;
__DATA__


@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!

@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>