名前

Mojo::Reactor::EV - libevを使った低レベルのイベントリアクター

使い方

use Mojo::Reactor::EV;

# ハンドルが読み込み可能あるいは書き込み可能であれば監視する
my $reactor = Mojo::Reactor::EV->new;
$reactor->io($handle => sub {
  my ($reactor, $writable) = @_;
  say $writable ? 'Handle is writable' : 'Handle is readable';
});

# ハンドルは書き込み可能であるときだけ、監視を変更します。
$reactor->watch($first, 0, 1);

# ファイルデスクリプタをハンドルに変換し、読み込み可能であれば、監視します。
my $second = IO::Handle->new_from_fd($fd, 'r');
$reactor->io($second => sub {
  my ($reactor, $writable) = @_;
  say $writable ? 'Second handle is writable' : 'Second handle is readable';
})->watch($second, 1, 0);

# タイマーの追加
$reactor->timer(15 => sub {
  my $reactor = shift;
  $reactor->remove($handle);
  say 'Timeout!';
});

# 必要であれば装置を開始する
$reactor->start unless $reactor->is_running;

説明

Mojo::Reactor::EVEV(4.0+)をベースにした低レベルのイベント装置です。

イベント

Mojo::Reactor::EVMojo::Reactor::Pollのすべてのイベントを継承しています。

メソッド

Mojo::Reactor::EVMojo::Reactor::Pollからすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。

again

$reactor->again($id);

タイマーを開始する。 このメソッドはアクティブタイマーを必要とすることに注意してください。

is_running

my $bool = $reactor->is_running;

リアクターが実行されているかどうかをチェックします。

new

my $reactor = Mojo::Reactor::EV->new;

新しいMojo::Reactor::EVオブジェクトを生成します。

one_tick

$reactor->one_tick;

イベントが起こるか、どのイベントももはや監視されなくなるまでリアクターを実行します。 このメソッドはリアクターに制御を戻すので、注意して利用する必要があります。

# 0.5秒以上長くブロックしない
my $id = $reactor->timer(0.5 => sub {});
$reactor->one_tick;
$reactor->remove($id);

recurring

my $id = $reactor->recurring(0.25 => sub {...});

新しい再燃タイマーを生成します。 与えられた秒数の後に、繰り返しコールバックが実行されます。

start

$reactor->start;

I/Oとタイマーのイベントの監視を開始します。

# すでに実行されていないときだけ、リアクターを開始する。
$reactor->start unless $reactor->is_running;

stop

$reactor->stop;

I/Oとタイマーイベントの監視を停止します。

timer

my $id = $reactor->timer(0.5 => sub {...});

新しいタイマーを生成します。 与えられた秒数の後にコールバックが呼び出されます。

watch

$reactor = $reactor->watch($handle, $readable, $writable);

真か偽の値でハンドルを監視するために、IOイベントを変更します。 このメソッドはアクティブなI/Oウォッチャーを必要とすることに注意してください。

# 読み込み可能なイベントだけを監視する
$reactor->watch($handle, 1, 0);

# 書き込み可能なイベントだけを監視する
$reactor->watch($handle, 0, 1);

# 読み込み可能、書きこみ可能なイベントを監視する
$reactor->watch($handle, 1, 1);

# イベント監視することを停止する
$reactor->watch($handle, 0, 0);

参考

Mojolicious, Mojolicious::Guides, http://mojolicio.us.

(Mojolicious 8.12を反映。2019年5月27日)

関連情報