easyswoole - 基于swoole扩展实现的一款高性能php框架

Task

EasySwoole 3.3.0+ 異步任務放棄了 Swoole 的原生 task,采用獨立組件實現。

相對于原生 Swoole Taskeasyswoole/task 組件實現了以下功能:

  • 可以投遞閉包任務
  • 可以在 TaskWorker 等其他自定義進程繼續投遞任務
  • 實現任務限流與狀態監控

安裝

composer require easyswoole/task

框架中使用

同步調用:

\EasySwoole\EasySwoole\Task\TaskManager::getInstance()->sync(function (){
    echo 'sync';
});

異步調用:

\EasySwoole\EasySwoole\Task\TaskManager::getInstance()->async(function () {
    echo 'async';
}, function ($reply, $taskId, $workerIndex) {
    // $reply 返回的執行結果
    // $taskId 任務id
    echo 'async success';
});

由于 php 本身就不能序列化閉包,該閉包投遞是通過反射該閉包函數,獲取 php 代碼直接序列化 php 代碼,然后直接 eval 代碼實現的。
所以投遞閉包無法使用外部的對象引用,以及資源句柄,復雜任務請使用任務模板方法。

任務模版

自定義一個任務模版

<?php

namespace App\Task;

use EasySwoole\Task\AbstractInterface\TaskInterface;

class CustomTask implements TaskInterface
{
    protected $data;

    public function __construct($data)
    {
        // 保存投遞過來的數據
        $this->data = $data;
    }

    public function run(int $taskId, int $workerIndex)
    {
        // 執行邏輯
    }

    public function onException(\Throwable $throwable, int $taskId, int $workerIndex)
    {
        // 異常處理
    }
}

如何使用

$task = \EasySwoole\EasySwoole\Task\TaskManager::getInstance();

// 投遞異步任務
$task->async(new CustomTask(['user' => 'custom']));

// 投遞同步任務
$data = $task->sync(new CustomTask(['user' => 'custom']));

投遞返回值

easyswoole/task 組件在 1.0.8 及以前版本支持,如下 4 個投遞返回值:

  • > 0 投遞成功(異步任務專屬,返回 taskId,同步任務直接返回 run() 方法運行之后返回的值)
  • -1 task 進程繁忙,投遞失敗 (已經到達最大運行數量 maxRunningNum )
  • -2 投遞數據解包失敗,當投遞數據傳輸時數據異常時會報錯,此錯誤為組件底層錯誤,一般不會出現
  • -3 任務出錯 (該任務執行時出現異常錯誤,被組件攔截并輸出錯誤)

1.0.9 ~ 1.1.1 版本,除了支持上述 4 個投遞返回值,還新增支持了以下 2 個投遞返回值:

  • -4 投遞的任務數據不合法,一般是投遞了不能序列化的數據才會出現。
  • -5 投遞的任務在運行時出錯

在最新的版本及以后版本中,又新增支持了以下 2 個投遞返回值:

  • -6 投遞的任務數據包已過期,一般是 Task 進程比較繁忙時才會出現。
  • -7 投遞任務時,任務運行完成后沒有任何數據返回。一般是因為執行任務時間過長導致 UnixSocket 超時,才會出現。

獨立使用

該組件可獨立使用,代碼如下:

<?php

use EasySwoole\Task\Config;
use EasySwoole\Task\Task;

require_once __DIR__ . '/vendor/autoload.php';

/**
 * 配置項中可以修改工作進程數、臨時目錄,進程名,最大并發執行任務數,異常回調等
 */
$config = new Config();
$task = new Task($config);

// 添加 swoole 服務
$http = new \Swoole\Http\Server("0.0.0.0", 9501);

// 注入 swoole 服務,進行創建 task 進程
$task->attachToServer($http);

// 在 onrequest 事件中調用 task (其他地方也可以,這只是示例)
$http->on("request", function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) use ($task) {
    if (isset($request->get['sync'])) {
        // 同步調用 task
        $ret = $task->sync(function ($taskId, $workerIndex) {
            return "{$taskId}.{$workerIndex}";
        });
        $response->end("sync result " . $ret);
    } else if (isset($request->get['status'])) {
        var_dump($task->status());
    } else {
        // 異步調用 task
        $id = $task->async(function ($taskId, $workerIndex) {
            \co::sleep(1);
            var_dump("async id {$taskId} task run");
        });
        $response->end("async id {$id} ");
    }
});
// 啟動服務
$http->start();

版本強調

框架低版本升級為 EasySwoole 3.3.0+,需要手動進行配置修改。

需要刪除 MAIN_SERVER.SETTING.task_worker_numMAIN_SERVER.SETTING.task_enable_coroutine 配置項。

請在項目根目錄的 dev.php/produce.phpMAIN_SERVER 配置項中,增加 TASK 子配置項:

<?php

// 這里省略

return [
    // 這里省略 ...

    'MAIN_SERVER' => [

        // 這里省略 ...

        'TASK' => [
            'workerNum' => 4,
            'maxRunningNum' => 128,
            'timeout' => 15
        ]
    ],

    // 這里省略 ...
];

Task管理

查看所有Task進程的狀態

php easyswoole.php task status

主站蜘蛛池模板: 恒升(新乡)食品有限公司 | 纳米砂磨机|纳米研磨机|实验室砂磨机-无锡市少宏粉体科技有限公司 | 江门市金环电器有限公司 | 拉布机_全自动拉布机_全自动拉布机厂家-江苏拉布机械科技有限公司 | 气动隔膜调节阀,气动比例调节隔膜阀|川熙流体设备百科 | 耐油橡胶接头,耐酸碱橡胶接头,耐高温橡胶接头|淞江集团 | 物联网空开-智能空气开关-智能断路器-家用接触器-万联电器官网 | 制沙机,反击式破碎机,重锤破碎机,泥石分离机,圆锥破碎机厂家-昆明德鑫机械 | 华药药业集团|华药修医师|修医师浸膏|河南华药药业有限公司 | 无锡纯铁-中纯特钢纯铁公司 | 长沙变频器维修,变频器维修,ABB变频器维修,西门子变频器维修,施耐德变频器维修,伺服驱动器维修,工业机器人维修,20年专业工控电气维修,长沙文铖电气设备有限公司_长沙文铖电气设备有限公司 | 显微镜|金相显微镜|光学显微镜专业生产商-上海光学仪器厂 | 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 青岛抛丸机_抛丸清理机_树脂砂设备_除尘设备 | 涂料分散剂_水墨分散剂-厚洹化学水性色浆助剂厂家 | 西安泰富西玛电机有限公司总部-电机-高压电机-西玛电机-西安西玛电机-泰富西玛电机-西安电机厂-西玛电机销售 | 诸城市瑞特机械有限公司_洗筐机,周转箱,托盘清洗机,风淋室 | 金属网帘|金属帘|装饰网帘|金属环网|金属幕墙网|金属垂帘|金属扣帘-安平县名图金属丝网制品有限公司 | 清关公司_进口报关公司【恒邦】进口报关流程及费用 | 亚洲一区日韩一区欧美一区a,中文字幕乱妇无码AV在线,欧美日韩免费在线观看,国产精品一区二区三区免费,日韩精品免费一线在线观看,日韩一本在线,国产呦精品一区二区三区下载,国产日韩精品一区二区在线观看,欧美日韩高清一区二区三区,日韩在线免费观看视频,欧美日韩一区在线观看 | 锯骨机-砍排机-全自动锯骨机-商用砍排机-切丁机 - 广州市九盈机械设备有限公司 | 南京自学考试网-南京自考报名 | 长沙联合产权交易所有限公司| 小程序定制,小程序开发,北京小程序公司,网站建设,网站制作,北京网站建设,北京网站制作 | 深圳-广州-惠州-东莞-重型货架-悬臂-轻中型货架-深圳市诺普泰仓储设备有限公司 | 惠声电子、广州市惠声电子科技有限公司、VBS、VBS惠声电子、VBS公共广播生产厂家、VBS广播功放生产厂家、VBS会议系统设备批发、VBSIP网络对讲系统厂家、VBS会议系统厂家、VBS智能中控厂家、VBS专业扩声厂家 | 消防安装_消防安装施工_消防施工_北京消防安装公司-亿杰(北京)消防工程有限公司 | 思沃普智能会议预约管理系统-视频会议管理-信息发布-访客管理-会议运维-会议支持-工位管理系统 | 沈阳河山铸造有限公司 | 罗茨鼓风机维修_三叶罗茨风机维修厂家电话_山东长沙章丘鼓风机修理_章鼓高压真空泵「上门服务」 罗茨鼓风机价格_三叶罗茨鼓风机厂家-山东锦工有限公司 | 冷却特性测试仪_ 刀柄热胀仪_加油小车价格_皮带张力仪_上海川奇机电设备有限公司 | 铜陵金玉米业有限责任公司【官网】| 首页--南京俊全科技有限公司,环保监测无人机,大疆无人机,农用无人机,植保无人机,巡检无人机,无人机环境监测仪,消防,无人机,航拍测绘,固定翼无人机,无人机电力巡检,四旋翼无人机 | 拓普思(常州)智能科技有限公司-青少年无人机教育培训比赛课程加盟拓活力 | 无线对讲机系统-中继台-山区隧道信号覆盖-贝亚特 | 削片机|木材破碎机|木材粉碎机|模板破碎机|双轴撕碎机_郑州木工机械制造厂 | 商业地产策划_商业地产代理_华锦亿爵商业地产顾问机构 | 停车场收费管理系统,通道闸系统,门禁系统,东莞停车场收费管理系统,东莞通道闸系统,-东莞市骄阳交通设备有限公司 | 西安logo设计公司/西安包装设计公司/西安画册设计公司/西安广告公司/西安品牌设计公司/泰勒广告 雾度计-雾度仪-透光率测试仪-3nh品牌雾度仪生产厂家 | 惠声电子、广州市惠声电子科技有限公司、VBS、VBS惠声电子、VBS公共广播生产厂家、VBS广播功放生产厂家、VBS会议系统设备批发、VBSIP网络对讲系统厂家、VBS会议系统厂家、VBS智能中控厂家、VBS专业扩声厂家 | 手游下载_app下载_好玩的手游下载_安卓市场下载_163下载 |