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

initialize 事件(即框架初始化事件)

框架初始化事件,在執(zhí)行 initialize 初始化事件時(shí),EasySwoole 框架此刻已經(jīng)完成了如下工作:

  • 加載配置文件
  • 初始化 Log/Temp 目錄,完成系統(tǒng)默認(rèn) Log/Temp 目錄的定義

函數(shù)原型

public static function initialize(): void
{
}

開發(fā)者自定義處理

開發(fā)者可以在 initialize 事件可以進(jìn)行如下修改:

  • 修改框架默認(rèn)使用的 error_report 級(jí)別,使用自定義的 error_report 級(jí)別
  • 修改框架默認(rèn)使用的 Logger 處理器,使用自定義的 Logger 處理器
  • 修改框架默認(rèn)使用的 Trigger 處理器,使用自定義的 Trigger 處理器
  • 修改框架默認(rèn)使用的 Error 處理器,使用自定義的 Error 處理器
  • 修改框架默認(rèn)使用的 Shutdown 處理器,使用自定義的 Shutdown 處理器
  • 修改框架默認(rèn)使用的 HttpException 全局處理器,使用自定義的 HttpException 全局處理器
  • 設(shè)置 Http 全局 OnRequestAfterRequest 事件
  • 注冊(cè)數(shù)據(jù)庫(kù)、Redis 連接池

具體可查看 SysConst.php

使用示例代碼:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');

        // 開發(fā)者自定義設(shè)置 錯(cuò)誤級(jí)別
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::ERROR_REPORT_LEVEL, E_ALL);

        // 開發(fā)者自定義設(shè)置 日志處理類(該類需要實(shí)現(xiàn) \EasySwoole\Log\LoggerInterface,開發(fā)者可自行查看并實(shí)現(xiàn),方便開發(fā)者自定義處理日志)
        $logDir = EASYSWOOLE_LOG_DIR; // 定義日志存放目錄
        $loggerHandler = new \EasySwoole\Log\Logger($logDir); // 定義日志處理對(duì)象
        \EasySwoole\Component\Di::getInstance()->set(SysConst::LOGGER_HANDLER, $loggerHandler);

        // 開發(fā)者自定義設(shè)置 Trace 追蹤器(該類需要實(shí)現(xiàn) \EasySwoole\Trigger\TriggerInterface,開發(fā)者可自行查看并實(shí)現(xiàn),方便開發(fā)者自定義處理 Trace 鏈路)
        // Trace 追蹤器需要依據(jù)上面的 logger_handler
        \EasySwoole\Component\Di::getInstance()->set(SysConst::TRIGGER_HANDLER, new \EasySwoole\Trigger\Trigger($loggerHandler));

        // 開發(fā)者自定義設(shè)置 error_handler
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::ERROR_HANDLER, function ($errorCode, $description, $file = null, $line = null) {
            // 開發(fā)者對(duì)錯(cuò)誤進(jìn)行處理
        });

        // 開發(fā)者自定義設(shè)置 shutdown
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::SHUTDOWN_FUNCTION, function () {
            // 開發(fā)者對(duì) shutdown 進(jìn)行處理
        });

        // 開發(fā)者自定義設(shè)置 HttpException 全局處理器
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_EXCEPTION_HANDLER, function ($throwable, Request $request, Response $response) {
            $response->withStatus(\EasySwoole\Http\Message\Status::CODE_INTERNAL_SERVER_ERROR);
            $response->write(nl2br($throwable->getMessage() . "\n" . $throwable->getTraceAsString()));
            Trigger::getInstance()->throwable($throwable);
        });

        // 開發(fā)者自定義設(shè)置 onRequest v3.4.x+
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_ON_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response) {
            // v3.4.x 之前的版本 onRequest 事件在 EasySwoolEvent.php 中已定義,不必重新設(shè)置
        });

        // 開發(fā)者自定義設(shè)置 afterRequest v3.4.x+
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response) {
            // v3.4.x 之前的版本 afterRequest 事件在 EasySwoolEvent.php 中已定義,不必重新設(shè)置
        });

        // 注冊(cè)數(shù)據(jù)庫(kù)連接及連接池(詳見(jiàn):http://www.zbjtqy.com/Components/Orm/install.html)
        // 注冊(cè) Redis 連接及連接池(詳見(jiàn):http://www.zbjtqy.com/Components/Redis/introduction.html)
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}

啟用前(在 initialize 事件中)調(diào)用協(xié)程 API

開發(fā)者在 EasySwoole 主服務(wù)啟動(dòng)前調(diào)用協(xié)程 api,必須使用如下操作:

$scheduler = new \Swoole\Coroutine\Scheduler();
$scheduler->add(function() {
    /* 調(diào)用協(xié)程API */
});
$scheduler->start();
// 清除全部定時(shí)器
\Swoole\Timer::clearAll();

具體使用示例:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');

        $scheduler = new \Swoole\Coroutine\Scheduler();
        $scheduler->add(function() {
            /* 調(diào)用協(xié)程API */
        });
        $scheduler->start();
        // 清除全部定時(shí)器
        \Swoole\Timer::clearAll();
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}

在 initialize 事件中調(diào)用連接池

initialize 事件在 EasySwoole 生命周期中屬于 主進(jìn)程,因此在主進(jìn)程中創(chuàng)建了連接池可能會(huì)導(dǎo)致以下問(wèn)題:

  • 創(chuàng)建了全局的定時(shí)器
  • 創(chuàng)建了全局的 EventLoop
  • 創(chuàng)建的連接被跨進(jìn)程公用,因此我們以服務(wù)啟動(dòng)前調(diào)用數(shù)據(jù)庫(kù) ORM 為例:

服務(wù)啟動(dòng)前調(diào)用數(shù)據(jù)庫(kù) ORM

下文 \EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL') 獲取的 MYSQL 配置,詳細(xì)參考 配置文件

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
        $config = new \EasySwoole\ORM\Db\Config(\EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL'));
        \EasySwoole\ORM\DbManager::getInstance()->addConnection(new \EasySwoole\ORM\Db\Connection($config));
        // 創(chuàng)建一個(gè)協(xié)程調(diào)度器
        $scheduler = new \Swoole\Coroutine\Scheduler();
        $scheduler->add(function () {
            $builder = new \EasySwoole\Mysqli\QueryBuilder();
            $builder->raw('select version()');
            \EasySwoole\ORM\DbManager::getInstance()->query($builder, true);
            // 這邊重置 ORM 連接池的 pool,避免連接被克隆到子進(jìn)程,造成連接跨進(jìn)程公用。
            // DbManager 如果有注冊(cè)多庫(kù)連接,請(qǐng)記得一起 getConnection($name) 獲取全部的 pool 去執(zhí)行 reset
            // 其他的連接池請(qǐng)獲取到對(duì)應(yīng)的 pool,然后執(zhí)行 reset() 方法

            // ORM 1.4.31 版本之前請(qǐng)使用 getClientPool() 
            // DbManager::getInstance()->getConnection()->getClientPool()->reset();
            \EasySwoole\ORM\DbManager::getInstance()->getConnection()->__getClientPool()->reset();
        });
        //執(zhí)行調(diào)度器內(nèi)注冊(cè)的全部回調(diào)
        $scheduler->start();
        //清理調(diào)度器內(nèi)可能注冊(cè)的定時(shí)器,不要影響到swoole server 的event loop
        \Swoole\Timer::clearAll();
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}
主站蜘蛛池模板: 铝矾土熟料_高铝_细粉_骨料_铝酸钙粉_价格_铸造消失膜用铝矾土—嵩峰厂家 | 一体式电磁流量计_分体式电磁流量计_卫生级电磁流量计_卫生型电磁流量计_电池供电电磁流量计_卡箍式电磁流量计_废水电磁流量计_德克森仪表(淮安)有限公司官网 | 显微镜|金相显微镜|光学显微镜专业生产商-上海光学仪器厂 | 淘金车,移动式淘金车,大小型旱地采矿车-青州冠诚重工机械有限公司 | 射频导纳物位开关|雷达液位计|安全光栅光幕传感器|音叉料位开关|两级跑偏开关|双向拉绳开关|纵向撕裂保护装置-山东卓信机械有限公司 | 橡塑保温材料_防火保温材料_保温棉_东莞康成保温材料有限公司 | 军用笔记本电脑_三防加固笔记本电脑_平板型全坚固计算机-集海卫通 | 找网页游戏鬼服 高返利鬼服游戏平台 鬼服开服表 - 猫游戏鬼服大全 | 江苏吉宏特专用汽车制造有限公司_联合吸污车-下水道管道清洗疏通车-综合养护吸排车 | 金蝶软件_金蝶湖南公司_长沙金蝶软件_精斗云软件_财务软件_进销存软件_云ERP软件_金蝶软件销售电话 | 文君阁-提供生活百科,日常生活健康小常识,生活小窍门,百科知识大全 | 青州市昌达机械设备有限公司_洗石机-洗砂机-筛沙机-砂石分离机-洗轮机-制砂机 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 消防栓保温罩,玻璃钢灭火器箱,玻璃钢消防沙箱-潍坊辰阳玻璃钢有限公司 | 网带烘干机-不锈钢网带-乙型网带-不锈钢链板-网带输送机-宁津县天惠机械制造有限公司 | 洗地机,洗地机价格,扫地机,工业吸尘器,手推式洗地机,驾驶式洗地机,北京洗地机【北京高美环保科技有限公司】 | 永磁变频空压机-无油空压机-螺杆式空压机热能回收-空压机配套-空压机合同能源管理-维修保养-北京斯特兰压缩机有限公司 | 潍坊铝单板_铝方通及氟碳喷涂材料供应企业-潍坊冠杰金属制品有限公司 | 桥梁支座更换_桥梁检测车租赁_高空作业车出租_支座更换_伸缩缝安装_隧道防水_养护加固_维修_出租_衡水庆兴桥梁养护工程有限公司 桥梁养护|桥梁维修加固|隧道裂缝修补|支座更换|管道堵水气囊|衡水众拓路桥养护有限公司 | 重庆消杀公司-重庆斗哥环保科技-灭鼠公司-重庆灭蟑螂-除四害-灭老鼠-灭虫-重庆灭白蚁公司 | 浙江凯力防爆电气集团有限公司【官网】 | 黑料网 - 黑料大事记-黑料门 黑料社最新 今日黑料 热门黑料 最新反差免费-黑料网今日黑料首页_黑料网 - 黑料大事记-黑料门 黑料社最新 今日黑料 热门黑料 最新反差免费-黑料网今日黑料首页 | 眉山净源居环保科技有限公司,眉山除甲醛公司,眉山甲醛治理,眉山保洁服务,眉山家政保洁,眉山家电维修 - 眉山净源居环保科技有限公司,眉山除甲醛公司,眉山甲醛治理,眉山保洁服务,眉山家政保洁,眉山家电维修 | 三安光电股份有限公司| 宿迁网站建设-宿迁做网站-宿迁网站制作-宿迁网络公司-宿迁网页设计-宿迁软件开发-宿迁新动力软件开发有限公司 | 天然气车船展、氢能装备展、氢燃料汽车展、核电装备展、国防信息化装备展---北京企发展览服务有限公司 | 智能档案柜,回转柜,密集架,密集柜厂家-北京及尚智能家具 | 乐云SEO | 品牌营销:抖音小红书关键词优化-ai搜索优化GEO推广 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 陶瓷颗粒厂家_彩色路面_彩色陶瓷颗粒-山东顺驰道路材料有限公司 陶瓷复合钢管-专业提供江苏陶瓷钢管和陶瓷内衬复合钢管的生产厂家 | 柔性测斜仪|滑动式测斜仪-华思(广州)测控科技有限公司 | 制砂机锤头_锤式破碎机锤头_粉煤机锤头_巩义市东辰实业 | 立式/卧式/潜水/液下/螺杆/耐磨/渣浆泵|泥浆泵|离心泵,厂家 - 河北聚盛泵业制造有限公司 | 余压控制器,余压监控系统,余压传感器-浙江巨川电气科技有限公司 | 合肥环氧地坪-合肥固化地坪施工-安徽地宽建筑装饰工程有限公司 | 基坑护栏,临边护栏网,爬架网,爬架网片,铁路防护栅栏,公路护栏网,河北昊坤金属制品有限公司 | 西安西玛电机销售,西安西玛电机有限公司(原泰富西玛西安电机厂) 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 西安网站建设,西安网站设计制作,西安短视频拍摄_短视频运营就选动力无限网络推广公司 | 吉林省创智汇成包装有限公司,长春高档礼盒,长春包装盒厂家,长春精品包装盒 | 在线腐蚀率仪,在线污垢热阻仪,靶式光源仪-北京同德创业科技有限公司 | 江苏鹤心食品有限公司-茶叶_果浆果酱_固体饮料 | 健力普医疗-半导体激光治疗仪,红外偏振光治疗仪,近红外线治疗仪-独家功能,光疗典范 |