php协程

开发需求:在一套老项目中(fastadmin)实现一个定时任务,每分钟访问几十个接口,拿到数据。

使用的swoole,在thinkphp5中实现协程。

启动命令php swoole.php

php 复制代码
<?php
//chdir(__DIR__);
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE', 'admin');
require __DIR__ . '/thinkphp/start.php';

use think\Db;
use app\admin\controller\Urls;
use app\admin\controller\Cloudbypass;

Swoole\Runtime::enableCoroutine();

Swoole\Coroutine\run(function() {
    for ($i = 1; $i <= 10; $i++) {
        go(function() use ($i) {
            $data = [
                'name' => 'ming',
                'age'  => mt_rand(20, 28),
                'tags' => ['php', 'swoole'],
            ];
            
            $info = new Cloudbypass();
            $response = $info->runTask($data);
            
            $now = microtime(true);
            $millisecond = sprintf("%.3f", $now); // 保留3位小数,相当于毫秒
            echo "[$i] " . $response->getContent() . " 时间: {$millisecond}" . PHP_EOL;
            
        });
    }
});
php 复制代码
<?php

namespace app\admin\controller;

use app\common\controller\Backend;
use think\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

class Cloudbypass extends Backend
{
	public function runTask($data)
    {
        // 这里你可以直接使用数组
        $name = $data['name'] ?? '未知';
        $age  = $data['age'] ?? '未知';
        $tags = implode(',', $data['tags'] ?? []);
        
        return json([
            'code' => 1,
            'msg'  => "调用成功: 姓名:{$name}, 年龄:{$age}, 标签:{$tags}",
        ]);
    }
}

逻辑就是并发调用runTask接口。

可以加入sql

php 复制代码
Swoole\Coroutine\run(function() {
    $list = Db::name('urls')->where('status', 1)->field('id')->select();
    
    foreach ($list as $v) {
        go(function() use ($v) {
            $urlsController = new Urls();
            $urlsController->updUrls($v['id']);
            echo "ID: {$v['id']} 本地调用完成" . PHP_EOL;
        });
    }
});

实现协程调用。在调用的方法内写curl。

相关推荐
weixin_408099673 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
王莎莎-MinerU7 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
AC赳赳老秦7 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
跨境技工小黎9 小时前
海外抢票:2026icketmaster注册、抢票及退票攻略
php
Helen_cai11 小时前
OpenHarmony 通用状态加载、空页面、错误兜底组件封装(全局业务通用 UI 组件 API23)
开发语言·ui·华为·php·harmonyos
REDcker12 小时前
基于 eBPF 的网络可观测:协议栈路径与 sk_buff
linux·服务器·网络·php·ebpf·bpf
weixin_BYSJ19871 天前
django在线图书销售平台---附源码16192
java·javascript·spring boot·python·django·flask·php
__log2 天前
弱网环境下的“生命线“:从AI流式响应到大文件上传的稳定性
开发语言·人工智能·php
TlSfoward2 天前
TLSFOWARD TLS指纹
开发语言·数据库·爬虫·搜索引擎·https·php
信仰8742 天前
Linux进阶篇01:网络基础配置
linux·网络·php