亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP Hyperf3.0有哪些新功能

發布時間:2023-01-04 16:24:39 來源:億速云 閱讀:133 作者:iii 欄目:編程語言

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

原生注解(Attribute)

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

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

<?php
declare(strict_types=1);

namespace App\Controller;

use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;

#[Controller]
class IndexController
{
    // Hyperf 會自動為此方法生成一個 /index/index 的路由,允許通過 GET 或 POST 方式請求
    #[RequestMapping(path: "index", methods: "get,post")]
    public function index(RequestInterface $request)
    {
        // 從請求中獲得 id 參數
        $id = $request->input('id', 1);
        return (string)$id;
    }
}

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

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

分布式事務

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

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

<?php
namespace App\Controller;

use DtmClient\TCC;
use DtmClient\TransContext;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Throwable;

#[Controller(prefix: '/tcc')]
class TccController
{

    protected string $serviceUri = 'http://127.0.0.1:9501';

    #[Inject]
    protected TCC $tcc;

    #[GetMapping(path: 'successCase')]
    public function successCase()
    {
        try {
            $this->tcc->globalTransaction(function (TCC $tcc) {
                // 創建子事務 A 的調用數據
                $tcc->callBranch(
                    // 調用 Try 方法的參數
                    ['amount' => 30],
                    // Try 方法的 URL
                    $this->serviceUri . '/tcc/transA/try',
                    // Confirm 方法的 URL
                    $this->serviceUri . '/tcc/transA/confirm',
                    // Cancel 方法的 URL
                    $this->serviceUri . '/tcc/transA/cancel'
                );
                // 創建子事務 B 的調用數據,以此類推
                $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() 獲得 全局事務ID 并返回
        return TransContext::getGid();
    }

}

至于其它事務模式,如  SagaXA二階段消息模式等,可以具體查閱 dtm-php/dtm-client 倉庫的 Readme 文件或 Hyperf 3.0 的相關文檔。

Swow 網絡引擎

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

我們提供了一個全新的 Skeleton 骨架項目用于快速創建一個基于 Swow 網絡引擎的 Hyperf 應用,以下是一個簡單的通過 Composer 創建應用的流程:

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

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

SDB 協程調試器

SDB 是一款使用 PHP 語言編寫的協程調試器工具,使用上類似于 GDB,它具有以下的幾個優點:

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

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

  • 零成本,可在生產環境使用,不影響性能;

  • 功能強大,深度定制,量身打造類微型操作系統;

通過 SDB,您可以對運行中的 Hyperf 應用進行交互,以實現查看當前所有協程狀態窺視協程進入指定協程查看調用棧打斷點單步調試查看及修改變量調試掃描僵尸協程Kill 協程等操作,真正意義上的將 PHP 協程帶到了工程化的實用階段

PHP Hyperf3.0有哪些新功能

Watchdog

Watchdog 為 PHP 提供了 CPU 調度能力,其核心原理是 Watchdog 線程會定期檢查其它線程中協程的活躍度情況,若發現工作線程中的協程不再活躍,則通過 ZendVM 的中斷機制對其進行狀態確認,若 VM 中斷失敗,則表明工作線程陷入了系統調用阻塞,觸發告警;若 VM 中斷成功,則表明工作線程陷入了 CPU 密集運算或死循環,則立即觸發用戶設定的調度規則進行調度。

通過 Watchdog 可以實現 可編程的協程調度機制,可以非常方便的解決過往頭疼的 CPU 饑餓 問題,以下是一些用法的演示:

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

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

// 可編程方式,函數會在程序阻塞 100ms 后觸發
$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 應用程序的編程體驗的工具,尤其有助于 Hyperf 應用,可以用于管理 PHP 環境和相關依賴,同時提供將 PHP 應用程序打包為二進制程序的能力,還提供反向代理服務來管理和部署 Swoole/Swow 服務。這些能力也是前所未有的,特別是將 Hyperf 或 PHP 應用打包為二進制程序的能力,打包好的程序,可以不依賴系統的 PHP 環境單獨運行,以達到類似于 Go 語言的打包能力,這些能力也得益于 phpmicro 的發展,而 Box 則是站在巨人的肩膀上,將這些能力以更加簡單易用的方式提供給大家使用~

以下是一個通過下載 Box 到創建一個 Hyperf 應用,并運行的簡單案例:

安裝 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 環境中,或者將 `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 環境中,或者將 `box` 放到你想要的任意 $PATH 路徑中


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

初始化 Github Access Token

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

  • 創建 Github Access Token,workflow 范圍需要勾選;

  • 運行 box config set github.access-token <Your Token> 命令來設置您的 token

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

通過 Box 初始化 PHP 環境并啟動 Hyperf

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

至此一個完整的安裝和運行流程已完成,我們可以發現過往復雜的環境部署環節,已經簡化為了區區幾個命令,通過 && 連接符甚至可以組成一行命令足以。

通過 Box 打包 Hyperf 應用為二進制程序

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

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

Box Kernel 切換

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

// 設置為 Swow Kernel [默認]
box config set kernel swow

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

Box 的更多能力

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

命令

box get pkg@version從遠程安裝包,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 命令做好相關環境的準備
box build-self 構建 box bin 本身
box build <path> 將 Hyperf 應用程序構建成二進制文件
box self-update 將 box bin 更新至最新版本
box config set-php-version <version>設置 box 的當前 PHP 版本,可用值:8.0 | 8.1
box config get-php-version <version>獲取 box 的當前設置的 PHP 版本
box reverse-proxy -u <upsteamHost:upstreamPort> 啟動一個反向代理 HTTP 服務器,用于將 HTTP 請求轉發到指定的多個上游服務器
box php <argument> 通過當前 box 的 PHP 版本運行任何 PHP 命令
box composer <argument>通過當前 box 的 PHP 版本運行任何 Composer 命令
box php-cs-fixer <argument> 通過當前 box 的 PHP 版本運行任何 php-cs-fixer 命令
box cs-fix <argument> 通過當前 box 的 PHP 版本運行 php-cs-fixer fix 命令
box phpstan <argument> 通過當前 box 的 PHP 版本運行任何 phpstan 命令
box pint <argument> 通過當前 box 的 PHP 版本運行任何 pint 命令

到此,相信大家對“PHP Hyperf3.0有哪些新功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

赤壁市| 深州市| 北海市| 郯城县| 广水市| 昌江| 琼海市| 高安市| 天镇县| 门源| 兴海县| 芦山县| 北辰区| 柳江县| 二连浩特市| 隆回县| 读书| 景德镇市| 盐津县| 宁城县| 怀远县| 田阳县| 广东省| 修文县| 壤塘县| 海原县| 务川| 新营市| 磴口县| 澜沧| 那曲县| 师宗县| 垫江县| 柳江县| 靖江市| 蛟河市| 台北市| 合山市| 太仆寺旗| 海原县| 乌海市|