当前位置: 首页 > news >正文

php协程

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

使用的swoole,在thinkphp5中实现协程。
目录结构
启动命令php swoole.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;});}
});
<?phpnamespace 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

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。

http://www.dtcms.com/a/267460.html

相关文章:

  • 【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
  • Spring boot之身份验证和访问控制
  • FreeCAD傻瓜教程-拉簧拉力弹簧的画法及草图的附着位置设定和Part工作台中形体构建器的妙用
  • C#扩展方法全解析:给现有类型插上翅膀的魔法
  • spring中 方法上@Transation实现原理
  • Flink-Source算子状态恢复分析
  • 机器视觉对位中的常见模型与技术原理
  • HTML网页应用打包Android App 完整实践指南
  • 【Project】基于kafka的高可用分布式日志监控与告警系统
  • openstack安装并初始化
  • 智能自主运动体的革命:当AI学会奔跑与协作 ——从单机定位到群体智能的跨越
  • 2025年的前后端一体化CMS框架优选方案
  • 未来趋势:AI与量子计算对服务器安全的影响
  • 博弈论基础-笔记
  • RTX5可以在中断中调用的API
  • 08_容器化与微服务:构建弹性架构
  • Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
  • Hbase2.6.2集群部署(最新版)
  • spring-initializer
  • OneCode MQTT插件开发实战:基于Paho.Client的物联网通信解决方案
  • python使用fastmcp包编写mcp服务端(mcp server)
  • ServiceNow CAD项目实战详细解析
  • PPT文字精简与视觉化技巧
  • StarRocks × Tableau 连接器完整使用指南 | 高效数据分析从连接开始
  • Eureka和Nacos都可以作为注册中心,它们之间的区别
  • DIODON HP30 防水充气无人机:海上侦察的创新利器
  • 进阶篇:18-使用 Kaniko 在无 Docker Daemon 环境中构建镜像
  • 《数据维度的视觉重构:打造交互式高维数据可视化的黄金法则》
  • 告别 undefined is not a function:TypeScript 前端开发优势与实践指南
  • 缓存解决方案