hirak/co-httpclient

基于协程的 httpclient

dev-master 2014-09-18 14:15 UTC

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 (公有领域)