PHPで内部用ストリームAPI
内部用のAPIを作ろうと思ったときに、データが多い場合のことを考えると面倒だったりする。
offsetでページ切り替えするか?とか。
で、基本に返ってストリームから少しずつデータを取得すればいいんじゃないか、というC言語の初歩的なやつをPHPで。
put.php
<?php $first = true; for ($i = 0; $i < 100; $i++){ if (!$first) echo "\n"; else $first = false; $json = json_encode(array('data' => "$i\n")); echo $json; usleep(100000); ob_flush(); flush(); }
沢山のデータを表示する代わりにsleepして表示する。
get.php
<?php echo str_pad(' ', 1024); $stream = fopen('http://localhost/stream/put.php', 'r'); while(!feof($stream)){ $line = fgets($stream); $line = json_decode($line); var_dump($line); echo '<br>'; ob_flush(); flush(); }
str_padは確認のためにブラウザ上で逐次表示するため。
少しずつデータが流れてくるようならOK。
json_encodeは改行をエスケープするのでデータに改行があっても大丈夫。
これをIteratorで包めば10000件とかのデータも普通にDBをループするのと同じように処理できるんじゃないか?