2010-09-09

【PHP】IOを多重化する方法

ネット麻雀システムを作ってる関係で、ソケットやストリームを多重化する方法を覚えたよ。
んで、これって実はWEBAPIに応用できるものなんじゃね?と気づいた。

PHPのプログラムはWEBAPIからデータを取得しようとすると、1つの通信が終わってからじゃないと次の通信が行えない。だけど、以下の方法を使えばIOを多重化することが出来て、結構な速度が出るプログラムになると思われる。

PHPの関数に、
 1)stream_socket_client
と、
 2)stream_select
って言うのがある。

WEBAPIのURLを配列にして、ひとつひとつ1)の関数に与えるとストリームが取得できる。
んで、取得したストリームをまた配列にして、2)の関数に与えると、受信できる「ストリームを返してくれる」というもの。
返されたストリームからXMLを受信し、すべてのストリームにデータがなくなったときにパーサを動かせばOK。

参考URL: http://www.ibm.com/developerworks/jp/opensource/library/os-php-multitask/index.html

---
stream_selectの使い方がまだイマイチ良くわかってないけど、結構面白いことが出来そうだね。

ZenBack

WebMoney ぷちカンパ