名前

Mojo::Reactor::Poll - pollをサポートした低レベルのイベントリアクター

使い方

use Mojo::Reactor::Poll;

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

# ハンドルが書き込み可能になったときだけ、監視する
$reactor->watch($handle, 0, 1);

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

# 必要であればリアクターを開始
$reactor->start unless $reactor->is_running;

説明

Mojo::Reactor::PollIO::Pollをベースにした低レベルのイベント装置です。 このリアクターは最大限のポータビリティを目指してデザインされているので、 モノトニッククロックを使ってタイムジャンプを処理できません。

イベント

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

メソッド

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

again

$reactor->again($id);

アクティブなタイマーを再開始します。

io

$reactor = $reactor->io($handle => sub {...});

I/Oイベントのためのハンドルを監視します。 ハンドルが読み込み可能、あるいは書き込み可能になったときはいつでも コールバックが実行されます。

# ハンドルが読み込み可能、書き込み可能であれば、コールバックは2回呼び出されるでしょう。
$reactor->io($handle => sub {
  my ($reactor, $writable) = @_;
  say $writable ? 'Handle is writable' : 'Handle is readable';
});

is_running

my $bool = $reactor->is_running;

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

one_tick

$reactor->one_tick;

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

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

recurring

my $id = $watcher->recurring(3 => sub {...});

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

remove

my $bool = $reactor->remove($handle);
my $bool = $reactor->remove($id);

ハンドル、あるいはタイマーを取り除きます。

reset

$reactor->reset;

すべてのハンドルとタイマーを取り除きます。

start

$watcher->start;

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

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

stop

$watcher->stop;

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

timer

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

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

watch

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

真か偽の値でハンドルを監視するために、IOイベントを変更します。

# 読み込み可能なイベントだけを監視する
$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日更新)

関連情報