hirak / co-httpclient
基于协程的 httpclient
dev-master
2014-09-18 14:15 UTC
Requires
- php: >=5.5
- spindle/httpclient: dev-master
Requires (Dev)
- apigen/apigen: v2.8.0
- dg/texy: <v2.5
- nette/nette: <2.2
- pdepend/pdepend: *
- phpunit/phpunit: *
This package is auto-updated.
Last update: 2024-09-04 14:29:27 UTC
README
使用 yield(generator) 实现了优雅的 curl_multi
函数示例。由于存在不少bug,所以不建议在生产环境中使用。
安装
要求
- php >= 5.5
- ext-curl
$ composer require hirak/co-httpclient
用法
<?php require 'vendor/autoload.php'; use Spindle\HttpClient; /** * JSONを返すWebAPIをGETメソッドで叩く関数。 * * - 待ちが発生するところにyieldキーワードを埋め込む。 * - returnの代わりにyieldキーワードを使う。 * - 例外は通常通り使用可能。 */ function getWebapiAsync($url) { $req = new HttpClient\Request($url); /** @type HttpClient\Response */ $res = (yield $req); if (($status = $res->getStatusCode()) >= 400) { throw new \RuntimeException($url, $status); } yield json_decode($res->getBody()); } //試しにpackagist.orgのjsonを取ってきてパースしてみる // json_decodeなどはなるべくWebAPIの待ち時間中に処理されます。 list($jpmirror, $origin) = co( getWebapiAsync('http://composer-proxy.jp/proxy/packagist/packages.json'), getWebapiAsync('https://packagist.org.cn/packages.json') ); var_dump($jpmirror, $origin);
许可
CC0-1.0 (公有领域)