think-swoole当中多协程进行访问

时间:2022-05-12 00:38:03

前言

在网上寻找多线程,或者相关swoole关于TP6+php8,几乎没有什么内容,只能靠自己摸索,目前的话自己可以用think-swoole里有WaitGroup类可以进行协程访问,运行速度结果还不错。

运行swoole在tp项目根目录

								php think swoole

其他命令不会生效,都只会产生这个,TP目前也没有出相关问题的解决办法 think-swoole当中多协程进行访问 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'];
    		
    	}
    
    }**

think-swoole当中多协程进行访问因为我访问的数据比较多,时间会稍微长点,不过相比于php单独访问可以为一个天一个地,而且根据我请求的数据这个访问速度已经是很快的了,大家可以以上例子进行修改,可以看看效果。最后别忘了进行运行