1. 程式人生 > 程式設計 >Swoft 2.0.7 如期而至

Swoft 2.0.7 如期而至

什麼是 Swoft ?

Swoft 是一款基於 Swoole 擴充套件實現的 PHP 微服務協程框架。Swoft 能像 Go 一樣,內建協程網路伺服器及常用的協程客戶端且常駐記憶體,不依賴傳統的 PHP-FPM。有類似 Go 語言的協程操作方式,有類似 Spring Cloud 框架靈活的註解、強大的全域性依賴注入容器、完善的服務治理、靈活強大的 AOP、標準的 PSR 規範實現等等。

Swoft 通過長達三年的積累和方向的探索,把 Swoft 打造成 PHP 界的 Spring Cloud,它是 PHP 高效能框架和微服務治理的最佳選擇。

Github

Swoft v2.0.7

2.0.72.0.6 上繼續揚帆,已在大量的生產業務中使用,得到很多使用者的肯定和支援。正式版本我們做了許多改進和優化,擁有了更好的效能。

  • 新增 Http Session 功能元件,提供http會話管理,支援多種儲存驅動
  • 增強 TCP server 請求支援新增全域性或對應的方法中介軟體
  • 增強 Websocket server 訊息請求支援新增全域性或對應的方法中介軟體

Http Session

通過 Composer 安裝 swoft/session 元件

  • 在專案 composer.json 所在目錄執行 composer require swoft/session
  • Swoft\Http\Session\SessionMiddleware 中介軟體加入到全域性中介軟體

在配置檔案 app/bean.php 裡:

    'httpDispatcher'    => [
        // Add global http middleware
        'middlewares'      => [
            \Swoft\Http\Session\SessionMiddleware::class,],複製程式碼

預設是基於本地檔案驅動,儲存在 runtime/sessions 目錄

更在驅動只需要配置對應 handler

類,例如配置 Redis 驅動:

'sessionHandler' => [
    'class'    => RedisHandler::class,// Config redis pool
    'redis' => bean('redis.pool')
],複製程式碼

Websocket訊息中介軟體

  • 全域性中介軟體

配置於 app/bean.php:

    /** @see \Swoft\WebSocket\Server\WsMessageDispatcher */
    'wsMsgDispatcher' => [
        'middlewares' => [
            \App\WebSocket\Middleware\GlobalWsMiddleware::class
        ],複製程式碼
  • 作用於控制器的
/**
 * Class HomeController
 *
 * @WsController(middlewares={DemoMiddleware::class})
 */
class TestController
{}
複製程式碼

TCP 請求中介軟體

  • 全域性中介軟體

配置於 app/bean.php:

    /** @see \Swoft\Tcp\Server\TcpDispatcher */
    'tcpDispatcher' => [
        'middlewares' => [
            \App\Tcp\Middleware\GlobalTcpMiddleware::class
        ],複製程式碼
  • 作用於控制器的
/**
 * Class DemoController
 *
 * @TcpController(middlewares={DemoMiddleware::class})
 */
class DemoController
{
    // ....
}
複製程式碼

Github

更新記錄

升級提示:

  • Swoole\WebSocket\Server::push 第四個引數 $finish 在 swoole 4.4.12 後改為了 int 型別。
  • tcp server 的 TcpServerEvent::CONNECT 事件引數保持跟receive,close一致。 $fd,$server 互換位置。

修復(Fixed)

  • 修復 config 注入時,沒有找到值也會使用對應型別的預設值覆蓋屬性,導致屬性預設值被覆蓋 d84d50a7
  • 修復 ws server 中使用message排程時,沒有過濾空資料,導致多發出一個響應。避免方法swoft-cloud/swoft#1002 d84d50a7
  • 修復 tcp server 中使用message排程時,沒有過濾空資料,導致多發出一個響應。07a01ba1
  • 修復 獨立使用console元件時缺少 swoft/stdlib 庫依賴 c569c81a
  • 修復 ArrayHelper::get 傳入key為 integer 時,報引數錯誤 a44dcad
  • 修復 console 渲染使用table,有int值時,計算寬度報型別錯誤 74a835ab
  • 修復 error 元件中使用者無法自定義設定預設的錯誤處理級別 4c78aeb
  • 修復 啟用和禁用 元件設定 isEnable() 不生效的問題 da8c51e56
  • 修復 在 cygwin 環境使用 uniqid() 方法必須將第二個引數設定為 true c7f688f
  • 修復 在 cygwin 環境不能夠設定程式title而導致報錯 c466f6a
  • 修復 使用 http response->delCookie() 無法刪除瀏覽器的cookie資料問題 8eb9241
  • 修復 ws server訊息排程時,接收到的ext資料不一定是陣列導致報錯 ff45b35
  • 修復 日誌檔案按時間拆分問題c195413
  • 修復 日誌 JSON 格式小問題a3fc6b9
  • 修復 rpc 服務提供者 getList 呼叫兩次問題fd03e71
  • 修復 redis cluster 不支援 auth 引數7a678f
  • 修復 模型查詢 json 型別,不支援 array 6023a9
  • 修復 redis multi 操作沒有及時是否連線 e5f698
  • 修復 redis 不支援 expireAt,geoRadius 749241
  • 修復 crontab 時間戳檢測偏差問題 eb08a46

更新(Update):

  • 更新 console 在渲染 help資訊之前也會發出事件 ConsoleEvent::SHOW_HELP_BEFORE d3f7bc3
  • 簡化和統一 http,ws,tcp,rpc server管理命令邏輯 f202c826
  • 更新 ws 和 tcp Connection類新增 newFromArraytoArray 方法,方便通過第三方儲存(redis)時匯出資訊和恢復連線 a8b0b7c
  • 優化 server 新增統一的 swoole pipe message 事件處理,在 ws,tcp 中使用swoft事件來處理程式間訊息 1c51a8c

增強(Enhancement)

  • 現在 tcp 請求支援新增全域性或對應的方法中介軟體,流程和使用跟http中介軟體類似。僅當使用系統排程時有用 6b593877
  • 現在 websocket message 請求支援新增全域性或對應的方法中介軟體,流程和使用跟http中介軟體類似。僅當使用系統排程時有用 9739815
  • 事件管理允許設定 destroyAfterFire 在每次事件排程後清理事件中攜帶的資料 50bf43d3
  • 資料庫錯誤異常新增 code 返回fd306f4
  • 協程檔案操作 writeFile 新增寫失敗異常08c4244
  • RPC 新增引數驗證8646fc5