Swoft 2.0.7 如期而至

什麼是 Swoft ?

Swoft 是一款基於 Swoole 擴展實現的 PHP 微服務協程框架。Swoft 能像 Go 同樣,內置協程網絡服務器及經常使用的協程客戶端且常駐內存,不依賴傳統的 PHP-FPM。有相似 Go 語言的協程操做方式,有相似 Spring Cloud 框架靈活的註解、強大的全局依賴注入容器、完善的服務治理、靈活強大的 AOP、標準的 PSR 規範實現等等。php

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

Github

Swoft v2.0.7

2.0.72.0.6 上繼續揚帆,已在大量的生產業務中使用,獲得不少用戶的確定和支持。正式版本咱們作了許多改進和優化,擁有了更好的性能。github

  • 新增 Http Session 功能組件,提供http會話管理, 支持多種存儲驅動
  • 加強 TCP server 請求支持添加全局或對應的方法中間件
  • 加強 Websocket server 消息請求支持添加全局或對應的方法中間件

Http Session

經過 Composer 安裝 swoft/session 組件web

  • 在項目 composer.json 所在目錄執行 composer require swoft/session
  • Swoft\Http\Session\SessionMiddleware 中間件加入到全局中間件

在配置文件 app/bean.php 裏:redis

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

默認是基於本地文件驅動,保存在 runtime/sessions 目錄數據庫

更在驅動只須要配置對應 handler 類,例如配置 Redis 驅動:json

'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
相關文章
相關標籤/搜索