亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

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

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

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

函數(shù)原型

public static function initialize(): void
{
}

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

開(kāi)發(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');

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

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

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

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

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

        // 開(kāi)發(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);
        });

        // 開(kāi)發(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è)置
        });

        // 開(kāi)發(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.b3f21.cn/Components/Orm/install.html)
        // 注冊(cè) Redis 連接及連接池(詳見(jiàn):http://www.b3f21.cn/Components/Redis/introduction.html)
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}

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

開(kāi)發(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)
    {

    }
}
亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    欧美三级黄美女| 欧美日韩电影一区二区| 亚洲高清视频在线观看| 欧美日韩一视频区二区| 欧美日韩1区| 香蕉久久夜色| 久久青青草原一区二区| 欧美另类高清视频在线| 久久av一区二区| 日本不卡一区二区三区在线观看 | 好吊视频一区二区三区四区| 国产一区二区三区无遮挡| 国产女主播一区二区| 好吊色欧美一区二区三区视频| 伊人久久大香线蕉精品| 久久国产主播| 先锋影音网一区| 免费亚洲网站| 亚洲日本理论电影| 久久久夜夜夜| 一区国产精品| 国产精品久久九九| 亚洲国产日韩欧美| 欧美日韩国产三区| 国产日韩精品久久| 五月天色一区| 久久综合九色| 亚洲黄页一区| 亚洲欧洲另类精品久久综合| 51国偷自产一区二区三区| 女女同性女同一区二区三区91 | 国产一区二区不卡视频在线观看| 欧美淫片网站| wwwxx欧美| 日韩午夜免费| 亚洲免费久久| 国产中文一区二区| 性一交一乱一区二区洋洋av| 一区二区三区欧美成人| 久久人人九九| 51国偷自产一区二区三区| 国语精品一区| 一区二区日本伦理| 老司机精品福利在线观看| 午夜在线播放视频欧美| 狠狠噜噜久久| 在线观看亚洲视频啊啊啊啊| 精品无人区一区二区三区| 亚洲一区中文| 国产偷国产偷亚洲高清97cao| 欧美福利专区| 一区二区三区av| 日韩欧美精品一区二区三区经典| 电影午夜精品一区二区三区| 亚洲一区图片| 国产精品综合| 国产亚洲欧洲| 亚洲久久成人| 亚洲国产裸拍裸体视频在线观看乱了中文| 午夜精品短视频| 久久久人人爽| 免费在线观看一区二区| 精品日韩欧美| 久久久久成人精品免费播放动漫| 成人综合av网| 精品91免费| 欧美久久电影| 天堂一区二区三区| 亚洲综合欧美日韩| 亚洲高清视频一区| 在线观看亚洲视频啊啊啊啊| 亚洲日本理论电影| 国内精品一区二区| 在线日本成人| 国产精品手机在线| 99在线高清视频在线播放| 国产精品久久久久久久久久久久午夜片 | 91视频网页| 成人国产1314www色视频| av一区二区三区在线观看| 97影院在线午夜| 精品视频一区在线| 日韩欧美激情一区二区| 欧美成人免费在线| 伊人色综合影院| 国产综合久久| 一区二区日韩免费看| 欧美主播一区二区三区美女 久久精品人 | 亚洲一区二区毛片| 久久都是精品| 国产精品日韩欧美一区二区三区| 精品日本一区二区三区| 神马影院一区二区| 一区在线视频观看| 久久久久久亚洲精品杨幂换脸| 国产乱码一区| 中文字幕日韩精品久久| 国产精品一国产精品k频道56| 久久婷婷麻豆| 欧美在线播放一区| 在线日韩av| 国产精品久久7| 欧美影视一区| 97se视频在线观看| 午夜精品短视频| 亚洲一区在线免费| 欧美一区二区在线视频观看| 国产中文一区二区| 国产二区不卡| 狠狠爱综合网| 久久精品国产美女| 亚洲电影在线| 欧美精品尤物在线| 国产视频一区三区| 日韩中文字幕av在线| 亚洲欧美视频一区二区三区| 日本一区高清不卡| 免费亚洲一区二区| 最新欧美日韩亚洲| 国产高清精品一区二区| 亚洲欧美一级二级三级| 国产不卡一区二区三区在线观看| 欧美 日韩 国产在线| 国产精品免费一区二区三区四区| 欧美日韩1区| 久久综合伊人77777麻豆| 91久久精品国产91久久性色tv | 在线播放一区| 欧美精品一区二区视频 | 亚洲精品九九| 亚洲国产成人不卡| 3d动漫精品啪啪一区二区三区免费| 一区国产精品| 久久综合九色欧美狠狠| 午夜一区二区三区不卡视频| 欧美国内亚洲| 欧美在线一二三区| 国产经品一区二区| 欧美专区一区二区三区| 欧美三日本三级少妇三99| 欧美日韩在线精品| 国产伦精品一区二区三毛| 国产精品手机在线| 91久久精品国产91久久性色tv | 午夜国产精品视频| 好吊妞www.84com只有这里才有精品| 在线日本高清免费不卡| 亚洲一区二区精品在线| 精品久久久久久一区| 蜜桃av噜噜一区二区三区| 在线国产日韩| 欧美先锋影音| 伊人av成人| 视频一区二区三区在线观看| 精品日产一区2区三区黄免费| 99re国产在线播放| 久久大香伊蕉在人线观看热2| 亚洲激情国产| 最近看过的日韩成人| 你懂的亚洲视频| 欧美+亚洲+精品+三区| 一本一道久久久a久久久精品91| 蜜桃在线一区二区三区精品| 国产精品一区二区免费看| 国产精品二区三区| 国产免费高清一区| 国产一区免费视频| 国产在线一区二| 免费影院在线观看一区| 日韩福利一区二区三区| 亚洲高清精品中出| 欧美日韩 国产精品| 一区精品久久| 亚洲综合另类| 国产精品成人观看视频免费| 精品一区久久久| 色播五月综合| 欧美日韩亚洲免费| 日韩天天综合| 久久久久91| 精品视频高清无人区区二区三区| 麻豆精品视频| 在线不卡日本| 一区二区三区四区五区在线 | 欧美日本不卡| 亚洲区一区二| 久久一区二区三区av| 成人区精品一区二区| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 久久久亚洲综合网站| 日韩av影视| 国内视频精品| 久久男女视频| 蜜桃臀一区二区三区| 亚洲一区二区三区四区中文| 亚洲成人中文| 成人av电影免费| 亚洲bbw性色大片| 亚洲精品三级| 国产传媒欧美日韩|