成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Swoft 源碼剖析 - 代碼自動更新機制

iflove / 3078人閱讀

摘要:作者鏈接來源簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。文件重載管理進程注冊了一個名為的該進程會在系統(tǒng)引導(dǎo)的最后一個階段,即啟動前啟動。

作者:bromine
鏈接:https://www.jianshu.com/p/e63...
來源:簡書
著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。
Swoft Github: https://github.com/swoft-clou...

前言

不同于PHP-FPM每次請求都會加載一次PHP代碼,常駐型應(yīng)用只會讀取一次源文件,為了避免每次發(fā)布/調(diào)試代碼都需要手動重啟Swoft應(yīng)用,Swoft提供了自動重載代碼的功能。

文件重載管理進程

Swoft注冊了一個名為reload的Process,該進程會在系統(tǒng)引導(dǎo)的最后一個階段,即Swoole啟動前啟動。該Process會啟動名為reload的Bean

//SwoftProcessBootstrapProcessReloadProcess.php
/**
 * Relaod process
 *
 * @Process(name="reload", boot=true)
 */
class ReloadProcess implements ProcessInterface
{
    /**
     * @param SwoftProcessProcess $process
     */
    public function run(SwoftProcess $process)
    {
        $pname = App::$server->getPname();
        $processName = sprintf("%s reload process", $pname);
        $process->name($processName);

        /* @var SwoftProcessBootstrapReload $relaod */
        $relaod = App::getBean(Reload::class);
        $relaod->run();
    }
    //.....
}
文件更新監(jiān)聽Bean
//SwoftProcessBootstrapReload::class
/**
 *  @Bean()
 */
class Reload
{
    //code .....

    /**
     * 啟動監(jiān)聽
     */
    public function run()
    {
        $server = App::$server;
        while (true) {
            sleep($this->interval);
            //FileHelper::md5File()負責(zé)遞歸的計算文件夾的md5,其實改名為FileHelper::md5Dir()更合適,因為他不接受非目錄的文件作為參數(shù)
            $md5File = FileHelper::md5File($this->watchDir);//$this->watchDir固定為@app別名對應(yīng)的文件夾
            if (strcmp($this->md5File, $md5File) !== 0) {
                echo "Start reloading...
";
                $server->isRunning();
                //md5和上次不一致就通知swoole重啟服務(wù)
                $server->getServer()->reload();
                echo "Reloaded
";
            }
            $this->md5File = $md5File;
        }
    }
}

代碼自動重載的機制也很簡單,每間隔幾秒遞歸的計算@app目錄下所有php文件的哈希值,發(fā)現(xiàn)文件夾的md5和之前的值有差別則通知Swoole重啟worker進程。

Swoole WorkerStart事件

Swoole會通知各個worker重啟,觸發(fā)Swoole事件WorkerStart,具體的回調(diào)事件如下

namespace SwoftBootstrapServerServerTrait.php;

/**
 * OnWorkerStart event callback
 *
 * @param Server $server server
 * @param int $workerId workerId
 * @throws InvalidArgumentException
 */
public function onWorkerStart(Server $server, int $workerId)
{
    // Init Worker and TaskWorker
    $setting = $server->setting;
    $isWorker = false;

    if ($workerId >= $setting["worker_num"]) {
        // TaskWorker
        ApplicationContext::setContext(ApplicationContext::TASK);
        ProcessHelper::setProcessTitle($this->serverSetting["pname"] . " task process");
    } else {
        // Worker
        $isWorker = true;
        ApplicationContext::setContext(ApplicationContext::WORKER);
        ProcessHelper::setProcessTitle($this->serverSetting["pname"] . " worker process");
    }
    //觸發(fā)一個Swoft服務(wù)事件```SwooleEvent::ON_START```,其監(jiān)聽者使用@ServerListener(event=SwooleEvent::ON_START)聲明
    $this->fireServerEvent(SwooleEvent::ON_WORKER_START, [$server, $workerId, $isWorker]);
    //主要是重新掃描加載注解和Bean的重載
    $this->beforeWorkerStart($server, $workerId, $isWorker);
}
Swoft源碼剖析系列目錄:https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/28693.html

相關(guān)文章

  • Swoft 源碼剖析 - 目錄

    摘要:作者鏈接來源簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。同時順手整理個人對源碼的相關(guān)理解,希望能夠稍微填補學(xué)習(xí)領(lǐng)域的空白。系列文章只會節(jié)選關(guān)鍵代碼輔以思路講解,請自行配合源碼閱讀。 作者:bromine鏈接:https://www.jianshu.com/p/2f6...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。Swoft...

    qpwoeiru96 評論0 收藏0
  • Swoft 源碼剖析 - Swoole和Swoft的那些事 (Http/Rpc服務(wù)篇)

    摘要:和服務(wù)關(guān)系最密切的進程是中的進程組,絕大部分業(yè)務(wù)處理都在該進程中進行。隨后觸發(fā)一個事件各組件通過該事件進行配置文件加載路由注冊。事件每個請求到來時僅僅會觸發(fā)事件。服務(wù)器生命周期和服務(wù)基本一致,詳情參考源碼剖析功能實現(xiàn) 作者:bromine鏈接:https://www.jianshu.com/p/4c0...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。S...

    張漢慶 評論0 收藏0
  • Swoft 源碼剖析 - Swoole和Swoft的那些事(Task投遞/定時任務(wù)篇)

    摘要:作為定時任務(wù)的執(zhí)行者,通過每喚醒自身一次,然后把執(zhí)行表遍歷一次,挑選當(dāng)下需要執(zhí)行的任務(wù),通過投遞出去并更新該任務(wù)執(zhí)行表中的狀態(tài)。 作者:bromine鏈接:https://www.jianshu.com/p/b44...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。Swoft Github: https://github.com/swoft-clou.....

    vvpvvp 評論0 收藏0
  • Swoft 源碼剖析 - Swoft 中的注解機制

    摘要:中的注解注解是里面很多重要功能特別是,容器的基礎(chǔ)。主流的框架中使用的注解都是借用型注釋塊型注釋中的定義自己的注解機制。在中是注解信息的最終裝載容器。使用的信息構(gòu)造實例或獲取現(xiàn)有實例以上就是注解機制的整體實現(xiàn)了。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/ef7...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新...

    zzbo 評論0 收藏0
  • Swoft 源碼剖析 - 連接池

    摘要:基于擴展實現(xiàn)真正的數(shù)據(jù)庫連接池這種方案中,項目占用的連接數(shù)僅僅為。一種是連接暫時不再使用,其占用狀態(tài)解除,可以從使用者手中交回到空閑隊列中這種我們稱為連接的歸隊。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/1a7...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。Swoft Github: https:...

    rozbo 評論0 收藏0

發(fā)表評論

0條評論

iflove

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<