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

資訊專欄INFORMATION COLUMN

think-swoole 3.0入門教程(thinkphp 6.0)架構(gòu)分析 2

Shonim / 3018人閱讀

摘要:由于是基于容器創(chuàng)建和銷毀資源的,那么各個(gè)容器之間是相對(duì)隔離的。也就是說每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的環(huán)境用于執(zhí)行和解析,由于容器的隔離性,每個(gè)請(qǐng)求都不會(huì)和其他請(qǐng)求進(jìn)行干擾。因?yàn)橹挥挟?dāng)前協(xié)程才可以讀取到該數(shù)據(jù)。

前言
ThinkPHP即將迎來最新版本6.0,針對(duì)目前越來越流行Swoole,thinkphp也推出了最新的擴(kuò)展think-swoole 3.0
沙盒

本文主要介紹在ThinkPHP-swoole 3.0當(dāng)中所用到的沙盒技術(shù)。
沙盒--顧名思義,所有程序都運(yùn)行在一個(gè)封閉容器當(dāng)中,得益于更完善的容器技術(shù),在3.0擴(kuò)展當(dāng)中沙盒得以大展身手。

首先,查看沙盒是如何使用的,查看擴(kuò)展當(dāng)中Swoole.php,其中的OnRequest函數(shù)

 public function onRequest($req, $res)
    {
        $this->app->event->trigger("swoole.request");
        
        $this->resetOnRequest();
        
        /** @var Sandbox $sandbox */
        $sandbox = $this->app->make(Sandbox::class);
        $request = $this->prepareRequest($req);
        
        try {
            $sandbox->setRequest($request);
            
            $sandbox->init();
            
            $response = $sandbox->run($request);
            
            $this->sendResponse($sandbox, $response, $res);
        } catch (Throwable $e) {
            try {
                $exceptionResponse = $this->app
                    ->make(Handle::class)
                    ->render($request, $e);
                
                $this->sendResponse($sandbox, $exceptionResponse, $res);
            } catch (Throwable $e) {
                $this->logServerError($e);
            }
        } finally {
            $sandbox->clear();
        }
    }

代碼中,從容器中取出沙盒,然后將請(qǐng)求注入到沙盒,并在沙盒中計(jì)算并返回結(jié)果。最終對(duì)沙盒進(jìn)行清除,那么Sandbox是如何起到沙盒的作用的呢?

 //$sandbox->setRequest($request);

    public function setRequest(Request $request)
    {
        Context::setData("_request", $request);
        
        return $this;
    }

上述代碼將請(qǐng)求注入到了沙盒內(nèi),這里又多出一個(gè)Context,那么這個(gè)類又是做什么的呢?為何不在沙盒內(nèi)整個(gè)屬性來存儲(chǔ)呢?這個(gè)我們文末在做介紹,我介紹沙盒。

//$sandbox->init();
     public function init()
    {
        if (!$this->config instanceof Config) {
            throw new RuntimeException("Please initialize after setting base app.");
        }
        
        $this->setInstance($app = $this->getApplication());
        $this->resetApp($app);
    }

最主要的環(huán)節(jié)也就是這里了,看到這里就明白沙盒為何稱之為沙盒了。由于tp6是基于容器創(chuàng)建和銷毀資源的,那么各個(gè)容器之間是相對(duì)隔離的。下面接著看代碼

//$this->setInstance($app = $this->getApplication());
 public function getApplication()
    {
        $snapshot = $this->getSnapshot();
        if ($snapshot instanceof Container) {
            return $snapshot;
        }
        
        $snapshot = clone $this->getBaseApp();
        $this->setSnapshot($snapshot);
        
        return $snapshot;
    }

看到什么了嗎?clone,復(fù)制。這里將容器對(duì)象進(jìn)行了復(fù)制,也就是原容器有的對(duì)象,這個(gè)新容器也有。也就是說每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的環(huán)境用于執(zhí)行和解析,由于容器的隔離性,每個(gè)請(qǐng)求都不會(huì)和其他請(qǐng)求進(jìn)行干擾。
至于下面這段代碼,看到這里,我覺得您也已經(jīng)明白了。

$this->resetApp($app);

最后,$sandbox->clear(),清空Context類中保存的當(dāng)前協(xié)程的數(shù)據(jù),并將當(dāng)前沙盒的容器初始化

public function clear()
    {
        Context::clear();
        $this->setInstance($this->getBaseApp());
    }
番外篇

沙盒當(dāng)中為何會(huì)需要Context類呢?看到這個(gè)類以后就會(huì)明白了,static::getCoroutineId()是獲取當(dāng)前的協(xié)程ID,每一個(gè)協(xié)程都會(huì)有一個(gè)獨(dú)一無二的ID,這樣通過Context來存一些特殊數(shù)據(jù)或者對(duì)象就不會(huì)造成數(shù)據(jù)混亂。因?yàn)橹挥挟?dāng)前協(xié)程才可以讀取到該數(shù)據(jù)。

           
               
                                           
                       
                 

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

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

相關(guān)文章

  • think-swoole 3.0入門教程thinkphp 6.0架構(gòu)分析 1

    摘要:如下圖目錄結(jié)構(gòu)主要針對(duì)的是非常駐內(nèi)存方式運(yùn)行,為了兼容,雖然做了很多優(yōu)化,但是仍然無法像,等一些針對(duì)開發(fā)的框架一樣。在非常住內(nèi)存框架中,為了方便會(huì)有一些寫法導(dǎo)致在常駐內(nèi)存方式下不容易被釋放內(nèi)存,小則內(nèi)存泄漏,大則數(shù)據(jù)錯(cuò)亂。 前言 ThinkPHP即將迎來最新版本6.0,針對(duì)目前越來越流行Swoole,thinkphp也推出了最新的擴(kuò)展think-swoole 3.0 架構(gòu)分析 tp-s...

    Coding01 評(píng)論0 收藏0
  • think-swoole 3.0入門教程thinkphp 6.0

    摘要:前言即將迎來最新版本,針對(duì)目前越來越流行,也推出了最新的擴(kuò)展安裝由于目前沒有穩(wěn)定版本,所以只能安裝開發(fā)板接下來安裝,目前最新的穩(wěn)定版本是配置安裝結(jié)束可以根據(jù)自己的需求對(duì)配置信息進(jìn)行修改。 前言 ThinkPHP即將迎來最新版本6.0,針對(duì)目前越來越流行Swoole,thinkphp也推出了最新的擴(kuò)展think-swoole 3.0 安裝 由于目前thinkphp 6.0沒有穩(wěn)定版本,所...

    Bamboy 評(píng)論0 收藏0
  • thinkphp 6.0 swoole擴(kuò)展websocket使用教程(think-swoole)

    摘要:前言即將迎來最新版本,針對(duì)目前越來越流行,也推出了最新的擴(kuò)展。介紹即將推出的,已經(jīng)適配并推出,并且默認(rèn)適配了。和版本在使用方法上面有些許不同。其中的第一個(gè)參數(shù)和的第一個(gè)參數(shù)一致,作為事件名稱。 前言 ThinkPHP即將迎來最新版本6.0,針對(duì)目前越來越流行Swoole,thinkphp也推出了最新的擴(kuò)展think-swoole 3.0。 介紹 即將推出的tp6.0,已經(jīng)適配swool...

    Julylovin 評(píng)論0 收藏0
  • 《當(dāng) Swoole 遇上 ThinkPHP5》:Hello,World!

    摘要:安裝框架安裝如果已經(jīng)安裝了可以跳過本步驟,但是請(qǐng)確定通過命令來確保已經(jīng)使用了最新版本的使用以下命令可以直接通過官網(wǎng)下載并自動(dòng)安裝到目錄下如果以上安裝過程極慢的話,可以嘗試用以下方式通過國(guó)內(nèi)鏡像來安裝。 《當(dāng) Swoole 遇上 ThinkPHP5》:Hello,World! 本文假設(shè)你已經(jīng)有了 Linux 操作系統(tǒng)的 PHP 環(huán)境,強(qiáng)烈推薦使用 Vagrant 來搭建開發(fā)環(huán)境 安裝 ...

    xzavier 評(píng)論0 收藏0
  • 【PyTorch基礎(chǔ)教程1】線性模型(學(xué)不會(huì)來打我?。?/b>

    摘要:文章目錄一線性模型二繪圖工具三作業(yè)一線性模型不要小看簡(jiǎn)單線性模型哈哈,雖然這講我們還沒正式用到,但是用到的前向傳播損失函數(shù)兩種繪圖等方法在后面是很常用的。 文章目...

    djfml 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<