名前

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::StreamMojo::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::StreamMojo::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::IPIO::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日更新)

関連情報