/** * add new task and return a promise * * @param Task $task * @param null $task_name * @return \React\Promise\PromiseInterface */ public function attach(Task $task, $task_name = null) { if (is_null($task_name)) { $task_name = count($this->tasks); } $this->tasks[$task_name] = $task; curl_multi_add_handle($this->curl, $task->getCurl()); $deferred = new Deferred(); $this->deferred[$task_name] = $deferred; return $deferred->promise(); }
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2015/9/24 * Time: 16:09 */ date_default_timezone_set("PRC"); require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; $timer = new \Jenner\Timer(\Jenner\Timer::UNIT_KB); $timer->mark("start"); $async = new \Jenner\Http\Async(); for ($i = 0; $i < 20; $i++) { $task = \Jenner\Http\Task::createGet("http://www.baidu.com"); $async->attach($task, "baidu" . $i); $task2 = \Jenner\Http\Task::createGet("http://www.sina.com"); $async->attach($task2, "sina" . $i); $task3 = \Jenner\Http\Task::createGet("http://www.qq.com"); $async->attach($task3, "qq" . $i); } $result = $async->execute(); $timer->mark("end"); $timer->printDiffReport();
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2015/11/2 * Time: 10:57 */ date_default_timezone_set("PRC"); require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; $async = new \Jenner\Http\Async(); $task = \Jenner\Http\Task::createGet("http://www.baidu.com"); $promise = $async->attach($task, "baidu"); $promise->then(function ($data) { echo 'success:' . var_export($data, true) . PHP_EOL; }, function ($data) { echo 'error:' . var_export($data, true) . PHP_EOL; }); $async->execute();