Mojo::IOLoop::Stream - ノンブロッキングなI/Oストリーム
使い方
use Mojo::IOLoop::Stream; # クライアントのストリーム my $stream = Mojo::IOLoop::Stream->new($handle); $stream->on(read => sub { my ($stream, $bytes) = @_; ... }); $stream->on(close => sub { my $stream = shift; ... }); $stream->on(error => sub { my ($stream, $err) = @_; ... }); # 新しいデータのためのウォッチの開始と停止 $stream->start; $stream->stop; # 必要であればリアクターを開始 $stream->reactor->start unless $stream->reactor->is_running;
説明
Mojo::IOLoop::StreamはMojo::IOLoopで利用されるI/Oストリームのコンテナです。
イベント
Mojo::IOLoop::Streamは Mojo::EventEmitterからすべてのイベントを継承しており、 次の新しいイベントを発行することができます。
close
$stream->on(close => sub { my $stream = shift; ... });
ストリームが閉じられれば、このイベントが発行されます。
drain
$stream->on(drain => sub { my $stream = shift; ... });
すべてのデータが書き込まれれたときに一度だけ、このイベントが発行されます。
error
$stream->on(error => sub { my ($stream, $err) = @_; ... });
ストリームでエラーが起これば、このイベントが発行されます。処理されなかった場合は、致命的です。
read
$stream->on(read => sub { my ($stream, $bytes) = @_; ... });
新しいデータがストリームに到達すれば、このイベントが発行されます。
timeout
$stream->on(timeout => sub { my $stream = shift; ... });
ストリームが、とても長い間非アクティブになり、自動的にストリームが閉じられれば、 発行されます。
write
$stream->on(write => sub { my ($stream, $bytes) = @_; ... });
新しいデータがストリームに書きこままれれば、発行されます。
属性
Mojo::IOLoop::Streamは次の属性を実装しています。
reactor
my $reactor = $stream->reactor; $stream = $stream->reactor(Mojo::Reactor::Poll->new);
低レベルのイベントウォッチャー。 デフォルトはグローバルなMojo::IOLoopシングルトンのreactor
属性の値。 この属性は、弱参照になるので注意してください。
メソッド
Mojo::IOLoop::StreamはMojo::EventEmitterからすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
bytes_read
my $num = $stream->bytes_read;
受け取ったバイトの数。
bytes_written
my $num = $stream->bytes_written;
書き込まれたバイトの数。
close
$stream->close;
ストリームをすぐに閉じます。
close_gracefully
$stream->close_gracefully;
ストリームを徐々に閉じます。
handle
my $handle = $stream->handle;
ストリームのためのハンドルを取得します。通常はIO::Socket::IPかIO::Socket::SSL。
is_readable
my $bool = $stream->is_readable;
ストリームが読み込み可能であるかどうかをすばやくノンブロッキングでチェックします。 汚染されたソケットを識別するのに役立ちます。
is_writing
my $bool = $stream->is_writing;
ストリームが書き込み可能かどうかをチェックします。
new
my $stream = Mojo::IOLoop::Stream->new($handle);
新しいMojo::IOLoop::Streamオブジェクトを生成します。
start
$stream->start;
ストリームへの新しいデータの監視を停止します。
stop
$stream->stop;
ストリームへの新しいデータの監視を停止します。
steal_handle
my $handle = $stream->steal_handle;
ストリームからハンドルを盗み、自動的に閉じられるのを防ぎます。
stop
$stream->stop;
ストリームにおける新しいデータのための監視を停止します。
timeout
my $timeout = $stream->timeout; $stream = $stream->timeout(45);
自動的にストリームが非アクティブになるまでの最大の秒数です。 デフォルトは15
です。 この値を0
に設定するとこのストリームが無制限に非アクティブになることを許可します。
write
$stream->write('Hello!'); $stream->write('Hello!', sub {...});
データをストリームに書き込みます。オプショナルな排出コールバックは、 すべてのデータが書き込まれた後に一度だけ実行されます。
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月22日更新)