前言 在网上寻找多线程,或者相关swoole关于TP6+php8,几乎没有什么内容,只能靠自己摸索,目前的话自己可以用think-swoole里有WaitGroup类可以进行协程访问,运行速度结果还不错。 运行
前言
在网上寻找多线程,或者相关swoole关于TP6+php8,几乎没有什么内容,只能靠自己摸索,目前的话自己可以用think-swoole里有WaitGroup类可以进行协程访问,运行速度结果还不错。
运行swoole在tp项目根目录
php think swoole
其他命令不会生效,都只会产生这个,TP目前也没有出相关问题的解决办法 1.正式开始码代码 首先在控制器建一文件
<?php
namespace app\controller\v1;
use app\BaseController;
use think\Request;
use think\cache\driver\Redis;
class Task extends BaseController
{
public function index()
{
}
}
2加入在此文件下加入协程方法
public function testXie() {
echo date('Y-m-d H:i:s') . '--start..' . '<br/>';//开始时间
$n=8;//创建协程数目
$result = [];
$wg = new \Swoole\Coroutine\WaitGroup();#此类在vender/swoole/id-helper下自己可以根据代码提示查看相关方法
for($i=0;$i<$n;$i++){
$wg->add();
go(function() use($wg, &$result,$i){
$url=rand_codes(8,'all');//此方法是自己封装无法展示可自行创建固定url数组
$result[$url[$i]]=$this->task_starts('files'.$i,$url[$i]);
$wg->done();
});
}
$wg->wait();
echo date('Y-m-d H:i:s') . '--done..' . PHP_EOL;//结束时间
dump($result);
}
3.关于其中的tasks_starts()方法:
**public function task_starts($file_addr,$url)
{
$url="";//这个是我接口请求地址因为和其他语言联动
$datas['url']=$url;
$datas['file_addr']=$file_addr;
$info=curls($url,$datas);//curl请求数据
$info=json_decode($info,true);
//返回信息
if(!$info){
return "参数错";
}else{
return $info['data'];
}
}**
因为我访问的数据比较多,时间会稍微长点,不过相比于php单独访问可以为一个天一个地,而且根据我请求的数据这个访问速度已经是很快的了,大家可以以上例子进行修改,可以看看效果。最后别忘了进行运行