読者です 読者をやめる 読者になる 読者になる

PHPとぶっこ抜きはズッ友だよ! Guzzle, Hasty, Reactでパラレルリクエスト

最近はPHPでマルチリクエストできるHTTPクライアントライブラリありまして、(asyncとマルチリクエストとかプロセスとかアプローチが違うってのは加味しなきゃいけませんけど)
実際にAPIリクエスト後の操作(callback)踏まえての実装をしたものが記事下記に貼ったコードかなと


以下ほそく

Guzzle

新進気鋭のcurlオンリーのHTTPクライアント、Goutte内のHTTPクライアントになったけどGoutteはGuzzleの利点生かせてない気が

Hasty

PHP界のスーパー右派(?)padraicがcomposerのPEARインストール遅いんじゃーと作った気がしなくもないsocketベースのAsynchronous HTTP Client 。作りかけなのでsetQueryがまだなので試す場合は私のブランチのでも見てください
https://github.com/composer/composer/issues/271
http://zend-framework-community.634137.n4.nabble.com/Asynchronous-HTTP-Client-concept-td4370944.html
https://github.com/sasezaki/hasty/tree/query_support

React

ラスマス・ラードフのスライドにも登場したアレ
http://talks.php.net/show/phpday12/13

適当なベンチマークでの雑感

一応microtimeとかtimeコマンドした結果での適当なベンチマークでの雑感
(取得先はlocalhostに1kのに300プールとか、3Mを10プールとかに変更したもので。localhostapache設定はapt-getのそのままだったかな)
・Hastyはリクエストプール数が100越えた位だと他のより微妙に早いっぽいけどメモリ消費が早い
・Guzzleは内部curlのわりに色々イベントディスパッチャーとか入れてるせいか、そんな早くなさげ
・Reactはlibevent入れてない状態なのでStreamSelectLoopでのfopen、stream_get_contentsだったのだけれどほかのと大差ないかな。
・参考用のパラレルじゃないZFHttpClientでも1k300回でも上記のパラレルのと時間そんな大差なかったです。



関連記事
pecl-HTTPによる複数リクエストを並列実行するサンプル
http://qiita.com/items/ccf6b111f1f3a7ad5e41
curl_multiでHTTP非同期リクエストを行うサンプル
http://qiita.com/items/1c67b51040246efb4254