hyperf中协程的几种应用实例:
返回结果如下:
{
"code": 200,
"errors": {
"msg": [
{
"eg1": [
"www.hu-rong.com",
"www.hu-rong.com"
],
"eg2": [
"www.hu-rong.com",
"www.hu-rong.com"
],
"eg3": {
"parallel1": "www.hu-rong.com",
"parallel2": "www.hu-rong.com"
},
"eg4": [
"001223",
"中文名称"
]
}
]
}
}
<?php
declare(strict_types=1);
namespace App\Controller;
use App\Model\StockCompany;
use App\Request\StockIndexRequest;
use App\Service\StockService;
use App\Service\UserService;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Utils\Parallel;
use Hyperf\View\RenderInterface;
use Swoole\Coroutine\Channel;
use Hyperf\Utils\WaitGroup;
class IndexController extends AbstractController
{
public function test()
{
return $this->responseSuccess(
[
'eg1' => self::_test1(),
'eg2' => self::_test2(),
'eg3' => self::_test3(),
'eg4' => self::_test4(),
]
);
}
private function _test4()
{
$result = parallel([
function () {
//注意:要用return返回结果
return StockCompany::first()->code;
},
function () {
return StockCompany::first()->stock_name;
}
]);
return $result;
}
private function _test3()
{
$parallel = new Parallel();
$parallel->add(function () {
var_dump('parallel-step-1');
return self::_me();//注意:要用return返回结果
}, 'parallel1');
$parallel->add(function () {
var_dump('parallel-step-3');
return self::_me();
}, 'parallel2');
var_dump('parallel-step-3');
$result = $parallel->wait();
var_dump('parallel-step-4');
return $result;
}
private function _test2()
{
$wg = new WaitGroup();
$result = [];
var_dump('waitgroup-step-1');
$wg->add(2);
co(function () use ($wg, &$result) {
var_dump('waitgroup-step-2');
$result[] = self::_me();
var_dump('waitgroup-step-3');
$wg->done();
var_dump('waitgroup-step-4');
});
co(function () use ($wg, &$result) {
var_dump('waitgroup-step-5');
$result[] = self::_me();
var_dump('waitgroup-step-6');
$wg->done();
var_dump('waitgroup-step-7');
});
var_dump('waitgroup-step-8');
$wg->wait();
var_dump('waitgroup-step-9');
return $result;
}
chnnale方式及执行流程:其它几种方式也是类似的,遇到阻塞将会进行协程切换
string(14) "channel-step-1"
string(14) "channel-step-2"
string(14) "channel-step-4"
string(14) "channel-step-5"
string(14) "channel-step-7"
[INFO] 【request】:url:https://api.hu-rong.com/about,method:get,参数:[]
[INFO] 【request】:url:https://api.hu-rong.com/about,method:get,参数:[]
[INFO] 【request-result】{"banners":["https:\/\/api.hu-rong.com\/uploads\/good\/20140321112913s.jpg","https:\/\/api.hu-rong.c
[INFO] 【request-result】{"banners":["https:\/\/api.hu-rong.com\/uploads\/good\/20140321112913s.jpg","https:\/\/api.hu-rong.c
string(14) "channel-step-6"
string(14) "channel-step-8"
string(14) "channel-step-3"
private function _test1()
{
$channel = new Channel();
var_dump('channel-step-1');
co(function () use ($channel) {
var_dump('channel-step-2');
$website = self::_me();
var_dump('channel-step-3');
$channel->push($website);
});
var_dump('channel-step-4');
co(function () use ($channel) {
var_dump('channel-step-5');
$website = self::_me();
var_dump('channel-step-6');
$channel->push($website);
});
var_dump('channel-step-7');
$result[] = $channel->pop();
var_dump('channel-step-8');
$result[] = $channel->pop();
return $result;
}
private function _me()
{
$url = 'https://api.hu-rong.com/about';
try {
$res = $this->httpRequestService->request('get', $url, []);
$res = json_decode($res, true);
$res = $res ? $res['about'][8][1] : '';
} catch (\Exception $e) {
$res = '';
}
return $res;
}
}
- 热门文章
- win7中将文件拷贝到虚拟机linux下
- phpexcel设置行高及列宽,背景颜色,
- rabbitmq无法启动
- intellij idea不显示git push按钮
- php7中使用mongodb的aggregate进行
- laravel页面静态化的方法
- centos7.4 64位下swoole安装及配置
- navicate连接mycat报1184错误
- curl设置超时不起作用(CURLOPT_TIM
- devops-jenkins容器为pending状态
- 好评文章
- phpexcel设置行高及列宽,背景颜色,
- php7中使用mongodb的aggregate进行
- intellij idea打开文件所在文件夹
- windows下使用MongoDB Compass Com
- win7中将文件拷贝到虚拟机linux下
- laravel 中悲观锁 & 乐观锁的使用
- 单点登录sso原理及php实现方式及de
- navicate连接mycat报1184错误
- rabbitmq无法启动
- laravel整合dingo/api方法步骤:jwt
- 我的项目
- 【github】www.github.com/hurong241
- 【码云】gitee.com/hu_rong/projects
- 【docker hub】hub.docker.com/repositories/hurong241
- 【packagist】packagist.org/users/hurong241/packages
- 站点信息
- 建站时间:2011年
- 文章数:623篇
- 浏览数:1357698