真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHPHyperf3.0有哪些新功能

本篇內(nèi)容主要講解“PHP Hyperf3.0有哪些新功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“PHP Hyperf3.0有哪些新功能”吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供定安企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計、H5場景定制、小程序制作等業(yè)務(wù)。10年已為定安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

原生注解(Attribute)

隨著 PHP 8.1、8.2 的發(fā)布,給 PHP 帶來了很多新的特性,其中與 Hyperf 最為相關(guān)的就是 PHP 的原生注解(Attribute)了,Hyperf 3.0 也放棄了過往采用的基于注釋解析的注解功能實現(xiàn),轉(zhuǎn)而采用 PHP 的原生注解,當(dāng)然對應(yīng)依賴的 PHP 版本,也將調(diào)整為最低要求 PHP 8.0。

我們以一個最簡單的 Controller 案例來呈現(xiàn)新的原生注解的使用:

input('id', 1);
        return (string)$id;
    }
}

同時隨著原生注解的應(yīng)用,在 3.0 中也能夠支持在同一個位置重復(fù)應(yīng)用同一個注解了,比如過往在一個 Controller Action 想要應(yīng)用多個 Middleware 時,需要通過 @Middlewares 注解包含多個 @Middleware 注解實現(xiàn)應(yīng)用,而在 3.0 則可直接書寫多個 @Middleware 注解實現(xiàn)該應(yīng)用。同時在 3.0 中,注解也可以應(yīng)用在方法的參數(shù)上,以實現(xiàn)一些針對方法參數(shù)定義、參數(shù)解析等功能。

從 注釋注解 調(diào)整為 原生注解,也無需擔(dān)憂過往項目的遷移改造工作量,Hyperf 也提供了對應(yīng)的工具一鍵自動轉(zhuǎn)換,只需要在 2.2 時引入 hyperf/code-generator 組件,并執(zhí)行 php bin/hyperf.php code:generate -D app 命令,即可將 app 文件夾內(nèi)的注釋注解自動轉(zhuǎn)為原生注解,輕松省力~

分布式事務(wù)

在過去的一年里,Hyperf 團(tuán)隊也為 PHP 領(lǐng)域孵化了兩個前所未有的分布式事務(wù)組件并貢獻(xiàn)到對應(yīng)的開源社區(qū),對應(yīng) DTM (首個基于 Go 語言實現(xiàn)的流行分布式事務(wù)管理器) 與 Seata (由阿里巴巴開源的流行分布式事務(wù)管理器) 兩款主流的開源分布式事務(wù)管理器,分別是 dtm-php/dtm-client 和 seata/seata-php ,其中 dtm-php 是實現(xiàn)了 dtm 完整功能的分布式事務(wù)客戶端,已支持 TCC模式、SagaXA、二階段消息模式的分布式事務(wù)模式,并分別實現(xiàn)了與 DTM Server 以 HTTP 協(xié)議gRPC 協(xié)議 通訊,該客戶端可安全運行于 PHP-FPM 和 Swoole 協(xié)程環(huán)境中,更是對 Hyperf 框架做了更加易用的功能支持,可應(yīng)用于生產(chǎn)環(huán)境中,而 seata-php 仍在開發(fā)迭代中,尚未能用于生產(chǎn)環(huán)境,也希望能有更多人參與進(jìn)來共同迭代。

我們也以一個簡單的例子來說明如何在 Hyperf 中實現(xiàn)一個 TCC 分布式事務(wù)的調(diào)用,其它分布式事務(wù)模式可查閱 dtm-php repo 的 README 文件,或 Hyperf 3.0 文檔關(guān)于分布式事務(wù)一章。

tcc->globalTransaction(function (TCC $tcc) {
                // 創(chuàng)建子事務(wù) A 的調(diào)用數(shù)據(jù)
                $tcc->callBranch(
                    // 調(diào)用 Try 方法的參數(shù)
                    ['amount' => 30],
                    // Try 方法的 URL
                    $this->serviceUri . '/tcc/transA/try',
                    // Confirm 方法的 URL
                    $this->serviceUri . '/tcc/transA/confirm',
                    // Cancel 方法的 URL
                    $this->serviceUri . '/tcc/transA/cancel'
                );
                // 創(chuàng)建子事務(wù) B 的調(diào)用數(shù)據(jù),以此類推
                $tcc->callBranch(
                    ['amount' => 30],
                    $this->serviceUri . '/tcc/transB/try',
                    $this->serviceUri . '/tcc/transB/confirm',
                    $this->serviceUri . '/tcc/transB/cancel'
                );
            });
        } catch (Throwable $e) {
            var_dump($e->getMessage(), $e->getTraceAsString());
        }
        // 通過 TransContext::getGid() 獲得 全局事務(wù)ID 并返回
        return TransContext::getGid();
    }

}

至于其它事務(wù)模式,如  Saga、XA二階段消息模式等,可以具體查閱 dtm-php/dtm-client 倉庫的 Readme 文件或 Hyperf 3.0 的相關(guān)文檔。

Swow 網(wǎng)絡(luò)引擎

實際上在 Hyperf 2.2 中,就已經(jīng)支持了 Swow 網(wǎng)絡(luò)引擎的運行,隨著 Swow 1.0 正式版的發(fā)布,在 Hyperf 3.0 中,我們也把 Swow 的應(yīng)用提高到了一個更高的高度,Swow 實現(xiàn)了一套有史以來最完整的 PHP 協(xié)程模型,它全面釋放了 PHP 的真正實力,使得開發(fā)者可以做到以往難以想象的事情,對比 Swoole 它具備更好的兼容性、可調(diào)試性、可編程性,它甚至能使 Hyperf 運行于原生 Windows 環(huán)境下而無需借助 WSL 或 Docker,同時也提供了 SDBWatchdog 工具對協(xié)程運行進(jìn)行調(diào)試和監(jiān)控,極大的提升了 Hyperf 的可調(diào)試性。

我們提供了一個全新的 Skeleton 骨架項目用于快速創(chuàng)建一個基于 Swow 網(wǎng)絡(luò)引擎的 Hyperf 應(yīng)用,以下是一個簡單的通過 Composer 創(chuàng)建應(yīng)用的流程:

composer create-project hyperf/swow-skeleton:dev-master

創(chuàng)建后,確保您的 PHP 環(huán)境已經(jīng)安裝好了 Swow 擴(kuò)展,便可直接通過 php bin/hyperf.php start 命令啟動服務(wù),整體使用與原來無異,Hyperf 底層已做好了適配。在 Windows 環(huán)境中也只需在 CMD 或者 Poweshell 中運行即可哦~

SDB 協(xié)程調(diào)試器

SDB 是一款使用 PHP 語言編寫的協(xié)程調(diào)試器工具,使用上類似于 GDB,它具有以下的幾個優(yōu)點:

  • 使用簡單,只需要一行代碼即可開啟;

  • 無需端口,可直接運行在 TTY 上;

  • 零成本,可在生產(chǎn)環(huán)境使用,不影響性能;

  • 功能強(qiáng)大,深度定制,量身打造類微型操作系統(tǒng);

通過 SDB,您可以對運行中的 Hyperf 應(yīng)用進(jìn)行交互,以實現(xiàn)查看當(dāng)前所有協(xié)程狀態(tài)窺視協(xié)程、進(jìn)入指定協(xié)程、查看調(diào)用棧打斷點、單步調(diào)試、查看及修改變量調(diào)試、掃描僵尸協(xié)程、Kill 協(xié)程等操作,真正意義上的將 PHP 協(xié)程帶到了工程化的實用階段

PHP Hyperf3.0有哪些新功能

Watchdog

Watchdog 為 PHP 提供了 CPU 調(diào)度能力,其核心原理是 Watchdog 線程會定期檢查其它線程中協(xié)程的活躍度情況,若發(fā)現(xiàn)工作線程中的協(xié)程不再活躍,則通過 ZendVM 的中斷機(jī)制對其進(jìn)行狀態(tài)確認(rèn),若 VM 中斷失敗,則表明工作線程陷入了系統(tǒng)調(diào)用阻塞,觸發(fā)告警;若 VM 中斷成功,則表明工作線程陷入了 CPU 密集運算或死循環(huán),則立即觸發(fā)用戶設(shè)定的調(diào)度規(guī)則進(jìn)行調(diào)度。

通過 Watchdog 可以實現(xiàn) 可編程的協(xié)程調(diào)度機(jī)制,可以非常方便的解決過往頭疼的 CPU 饑餓 問題,以下是一些用法的演示:

// 運行超過 1ms 就讓出控制權(quán)
\Swow\WatchDog::run(1 * 1000 * 1000);

// 運行超過 1ms 就讓出 10ms,調(diào)度失敗并超過 5ms 時視為系統(tǒng)調(diào)用阻塞
\Swow\WatchDog::run(1 * 1000 * 1000, 5 * 1000 * 1000, 10);

// 可編程方式,函數(shù)會在程序阻塞 100ms 后觸發(fā)
$alertCountMap = new WeakMap();
\Swow\WatchDog::run(quantum: 100 * 1000 * 1000, alerter: static function () use ($alertCountMap): void {
    $coroutine = Coroutine::getCurrent();
    $alertCount = ($alertCountMap[$coroutine] ??= 0) + 1;
    $alertCountMap[$coroutine] = $alertCount;
    echo 'CPU starvation occurred, suspend this coroutine...' . PHP_EOL;
    sleep(0);
    if ($alertCount > 5) {
        echo 'Kill the bad guy' . PHP_EOL;
        $coroutine->kill();
    }
});

PHP Hyperf3.0有哪些新功能

Box

Box 是一個致力于幫助提升 PHP 應(yīng)用程序的編程體驗的工具,尤其有助于 Hyperf 應(yīng)用,可以用于管理 PHP 環(huán)境和相關(guān)依賴,同時提供將 PHP 應(yīng)用程序打包為二進(jìn)制程序的能力,還提供反向代理服務(wù)來管理和部署 Swoole/Swow 服務(wù)。這些能力也是前所未有的,特別是將 Hyperf 或 PHP 應(yīng)用打包為二進(jìn)制程序的能力,打包好的程序,可以不依賴系統(tǒng)的 PHP 環(huán)境單獨運行,以達(dá)到類似于 Go 語言的打包能力,這些能力也得益于 phpmicro 的發(fā)展,而 Box 則是站在巨人的肩膀上,將這些能力以更加簡單易用的方式提供給大家使用~

以下是一個通過下載 Box 到創(chuàng)建一個 Hyperf 應(yīng)用,并運行的簡單案例:

安裝 Box

// Mac
wget https://github.com/hyperf/box/releases/download/v0.5.5/box_x86_64_macos -O box
sudo mv ./box /usr/local/bin/box
sudo chmod 755 /usr/local/bin/box
// 確保 /usr/local/bin/box 在你的 $PATH 環(huán)境中,或者將 `box` 放到你想要的任意 $PATH 路徑中


// Linux x86_64
wget https://github.com/hyperf/box/releases/download/v0.5.5/box_x86_64_linux -O box
sudo mv ./box /usr/local/bin/box
sudo chmod 755 /usr/local/bin/box
// 確保 /usr/local/bin/box 在你的 $PATH 環(huán)境中,或者將 `box` 放到你想要的任意 $PATH 路徑中


// Windows
curl -o box.exe https://github.com/hyperf/box/releases/download/v0.5.5/box_x64_windows.exe
// 將 `box.exe` 放到你想要的任意 Path 環(huán)境變量路徑中,同時 Windows 版本在執(zhí)行時需要在命令行中使用 `box.exe` 而不是 `box`

初始化 Github Access Token

Box 需要一個 Github 訪問令牌來請求 Github API,以便于從 GitHub Actions 的 Artifacts 中檢索包的版本。

  • 創(chuàng)建 Github Access Token,workflow 范圍需要勾選;

  • 運行 box config set github.access-token 命令來設(shè)置您的 token

我們將在 v0.6 版本讓使用 Box 前無需設(shè)置 Github Access Token,以提供更加簡便的使用體驗,請期待~

通過 Box 初始化 PHP 環(huán)境并啟動 Hyperf

// 通過 box 安裝 PHP 8.1,此安裝不會影響系統(tǒng)原來自身安裝的 PHP
box get php@8.1
// 通過 box 安裝 composer
box get composer
// 通過 box composer 創(chuàng)建 hyperf 應(yīng)用,可指定 dev-master 分支以防止 packagist 代理數(shù)據(jù)落后的問題
box composer create-project hyperf/swow-skeleton:dev-master
// 通過 box 啟動 hyperf
box hyperf start

至此一個完整的安裝和運行流程已完成,我們可以發(fā)現(xiàn)過往復(fù)雜的環(huán)境部署環(huán)節(jié),已經(jīng)簡化為了區(qū)區(qū)幾個命令,通過 && 連接符甚至可以組成一行命令足以。

通過 Box 打包 Hyperf 應(yīng)用為二進(jìn)制程序

這個神奇的能力,在操作上也被簡化得匪夷所思,只需預(yù)先執(zhí)行 box build-prepare 命令提前下載好相關(guān)依賴,這個命令只需執(zhí)行一次即可,后續(xù)即可通過 box build 命令對當(dāng)前所在文件夾的 Hyperf 應(yīng)用進(jìn)行打包動作。打包好后,當(dāng)前文件夾會出現(xiàn)一個名為 hyperf 的二進(jìn)制文件,后續(xù)只需要通過 hyperf start 命令即可啟動該 Hyperf 應(yīng)用。

Box 自身就是一個基于 Box 打包出來的 Hyperf 應(yīng)用,大家也可以通過了解 Box 項目本身,來了解該能力的使用。

Box Kernel 切換

默認(rèn)情況下,Box 由 Swow Kernel 提供支持,但是我們也提供了 Swoole Kernel,您可以通過 box config set kernel swoole 來切換為 Swoole Kernel,但是需要注意的是,Swoole Kernel 僅支持 PHP 8.1 版本,且不支持構(gòu)建二進(jìn)制程序功能和 Windows 系統(tǒng)環(huán)境。

// 設(shè)置為 Swow Kernel [默認(rèn)]
box config set kernel swow

// 設(shè)置為 Swoole Kernel (不支持 Windows)
box config set kernel swoole

Box 的更多能力

Box 還有更多有意思的使用方法和工具組合,可以通過下面的部分的命令清單快速一覽

命令

box get pkg@version從遠(yuǎn)程安裝包,pkg是包名,version是包的版本,box get pkg表示安裝最新版本的 pkg,例如, 運行 box get php@8.1 安裝 PHP 8.1, 運行 box get composer 安裝最新的 composer bin
box build-prepare 為 build 和 build-self 命令做好相關(guān)環(huán)境的準(zhǔn)備
box build-self 構(gòu)建 box bin 本身
box build  將 Hyperf 應(yīng)用程序構(gòu)建成二進(jìn)制文件
box self-update 將 box bin 更新至最新版本
box config set-php-version 設(shè)置 box 的當(dāng)前 PHP 版本,可用值:8.0 | 8.1
box config get-php-version 獲取 box 的當(dāng)前設(shè)置的 PHP 版本
box reverse-proxy -u  啟動一個反向代理 HTTP 服務(wù)器,用于將 HTTP 請求轉(zhuǎn)發(fā)到指定的多個上游服務(wù)器
box php  通過當(dāng)前 box 的 PHP 版本運行任何 PHP 命令
box composer 通過當(dāng)前 box 的 PHP 版本運行任何 Composer 命令
box php-cs-fixer  通過當(dāng)前 box 的 PHP 版本運行任何 php-cs-fixer 命令
box cs-fix  通過當(dāng)前 box 的 PHP 版本運行 php-cs-fixer fix 命令
box phpstan  通過當(dāng)前 box 的 PHP 版本運行任何 phpstan 命令
box pint  通過當(dāng)前 box 的 PHP 版本運行任何 pint 命令

到此,相信大家對“PHP Hyperf3.0有哪些新功能”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章名稱:PHPHyperf3.0有哪些新功能
URL網(wǎng)址:http://weahome.cn/article/pdopcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部