当前位置: 首页 > 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.xdnf.cn/news/1081747.html

相关文章:

  • MySQL 数据库传统方式部署主从架构的实现很详细
  • React Native 亲切的组件们(函数式组件/class组件)和陌生的样式
  • 若 VSCode 添加到文件夹内右键菜单中显示(通过reg文件方式)
  • 盘式制动器的设计+说明书和CAD)【6张】+绛重
  • Redis性能优化
  • 权电阻网络DAC实现电压输出型数模转换Multisim电路仿真——硬件工程师笔记
  • 前端捕获异常的全面场景及方法
  • Linux操作系统之文件(三):缓冲区
  • 每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
  • 【每天一个知识点】动态知识库
  • JxBrowser 8.9.0 版本发布啦!
  • chrome插件合集
  • vue/微信小程序/h5 实现react的boundary
  • 智能电动汽车系列 --- 车载软件开发思想与已有OEM现状碰撞
  • vue-39(为复杂 Vue 组件编写单元测试)
  • 设计模式(十)
  • 区块链技术核心组件及应用架构的全面解析
  • Dash 安装使用教程
  • 程序计数器(PC)是什么?
  • Linux入门篇学习——Linux 帮助手册
  • 版本控制器SVN
  • 基于区块链的物联网(IoT)安全通信与数据共享的典型实例
  • 三体融合实战:Django+讯飞星火+Colossal-AI的企业级AI系统架构
  • Abase和ByteKV存储方案对比
  • [C++] C++多重继承:深入解析复杂继承关系
  • 怎么更改cursor字体大小
  • github上部署自己的静态项目
  • XILINX Kintex 7系列FPGA的全局时钟缓冲器(BUFG)和区域时钟缓冲器(BUFR/BUFH)的区别
  • hello判断
  • WPF学习笔记(23)Window、Page与Frame、ViewBox