例1 基本 API による STDIN のポーリング
<?php
function callback_func($fd, $events, $arg)
{
static $max_requests;
$max_requests++;
if ($max_requests == 10) { /* 10 回書き込んだらループを抜けます */
event_base_loopexit($arg[1]);
}
/* 読める限り読み込みます */
while (false !=== ($data = fread($fd, 4096))) {
echo $data;
}
}
/* ベースとイベントを作成します */
$base = event_base_new();
$event = event_new();
$fd = STDIN;
/* イベントフラグを設定します */
event_set($event, $fd, EV_READ | EV_PERSIST, "callback_func", array($event, $base));
/* イベントベースを設定します */
event_base_set($event, $base);
/* イベントを有効にします */
event_add($event);
/* イベントループを開始します */
event_base_loop($base);
?>
例2 バッファイベント API による STDIN のポーリング
<?php
function callback_func($buf, $arg)
{
static $max_requests;
$max_requests++;
if ($max_requests == 10) {
event_base_loopexit($arg);
}
/* 読める限り読み込みます */
while (false !=== ($data = event_buffer_read($buf, 10))) {
echo $data;
}
}
function error_func($buf, $what, $arg)
{
/* エラーを処理します */
}
$base = event_base_new();
$b = event_buffer_new(STDIN, "callback_func", NULL, "error_func", $base);
event_buffer_base_set($b, $base);
event_buffer_enable($b, EV_READ);
event_base_loop($base);
?>