Think-Swoole: 全面協程化你的 ThinkPHP 應用

韓天峰發表於2023-03-09

ThinkPHP 是一款經典的國產開源 PHP 開發框架。ThinkPHP 誕生於 2006 年,距今已經有 17 年曆史。ThinkPHP 在國內的應用非常廣泛,很多知名企業使用了 ThinkPHP 來構建 Web 專案。

早期版本的 ThinkPHP 主要是執行在 PHP-FPM 模式下。為了解決長連線、高併發、阻塞 IO 的問題,ThinkPHP 官方提供了 Think-Swoole 元件,底層全面適配了 Swoole 協程,使得 ThinkPHP 應用可以一鍵協程化。

GitHub 地址

建立 ThinkPHP 專案

composer create-project topthink/think tp

使用 composer 命令可以快速建立一個 ThinkPHP 新專案。已有專案可跳過此步驟。

引入 Think-Swoole 元件

composer require topthink/think-swoole

啟動 HTTP 服務

直接在命令列下啟動 HTTP 服務端。

php think swoole

啟動完成後,預設會在 0.0.0.0:80 啟動一個 HTTP Server,可以直接訪問當前的應用。相關配置引數可以在 config/swoole.php 裡面配置(具體參考配置檔案內容)。

若本機已安裝了 Nginx,可能 80 已被佔用,可修改 config/swoole.php 設定為其他的埠

啟動後透過 http://127.0.0.1:9580/ 訪問程式

熱更新

由於 Swoole 服務執行過程中 PHP 檔案是常駐記憶體執行的,這樣可以避免重複讀取磁碟、重複解釋編譯,以便達到最高效能。所以更改業務程式碼後必須手動reload 或者 restart 才能生效。

Think-Swoole 提供了熱更新功能,在檢測到相關目錄的檔案有更新後會自動 reload,從而不需要手動進行 reload 操作,方便開發除錯。

如果你的應用開啟了除錯模式,預設是開啟熱更新的。原則上,在部署模式下不建議開啟檔案監控,一方面有效能損耗,另外一方面對檔案所做的任何修改都需要確認無誤才能進行更新部署。

熱更新的預設配置如下:

'hot_update' => [
    'enable' => env('APP_DEBUG', false),
    'name' => ['*.php'],
    'include' => [app_path()],
    'exclude' => [],
],

當我們在應用的根目錄下定義一個特殊的 .env 環境變數檔案,裡面設定了 APP_DEBUG=true 會預設開啟熱更新,你也可以直接把 enable 設定為true

連線池

Think-Swoole 實現了資料庫連線池功能,包括 MySQLRedis 等。

使用連線池要先開啟 Swoole 一鍵協程,需要配置如下引數:

'coroutine' => [
    'enable' => true,
    'flags' => SWOOLE_HOOK_FLAGS,
],

連線池配置引數如下:

'pool' =>[
    'db' => [
        'enable' => true,
        'max_active' => 3,
        'max_wait_time' => 5,
    ],
    'cache' => [
        'enable' => true,
        'max_active' => 3,
        'max_wait_time' => 5,
    ],
],

引數說明:

  • enable:是否啟用連線池
  • max_active:最大連線數,超過將不再新建連線
  • max_wait_time:超時時間,單位為秒
max_activemax_wait_time 需要根據自身業務和環境進行適當調整,最大化提高系統負載

相關文章