PHP
官方保持一致, 不再支持PHP7.0
(@matyhtf)Serialize
模塊, 在單獨的 ext-serialize 擴展中維護. 廢棄原因: 由於PHP
內核頻繁變更, 導致無法實現穩定可用的模塊, 與php serialize
相比沒有太大差異化定位PostgreSQL
模塊,在單獨的 ext-postgresql 擴展中維護. 廢棄原因: PostgreSQL
使用了非同步回調方式實現協程調度, 不符合目前內核協程化的統一規劃。另外PostgreSQL
目前用戶量非常低, 並且缺少必要的單元測試, 無法保證質量Runtime::enableCoroutine
不再會自動兼容協程內外環境, 一旦開啟, 則一切阻塞操作必須在協程內調用 (@matyhtf)由於引入了全新的協程MySQL
客戶端驅動, 底層設計更加規範, 但有一些小的向下不兼容的變化
fetch/nextResult
優化為按需讀取, 會產生IO調度defer
特性時, statement
發出的的請求, 需要使用statement->recv
接收defer/fetch_mode
特性時, 如有未接收完的數據, 將無法發起新的請求connected
屬性不再會實時基於事件更新, 而是在IO
操作失敗后更新Buffer
模塊,廢棄原因:可替代性強,使用率低,可用PHP
字元串、fopen("memory")
代替。Lock
模塊,廢棄原因:在協程模式下加鎖可能存在問題,可使用chan
實現協程版本的鎖stream_socket_pair
協程化, 建議開啟hook時, 如有單獨配置需求, 請使用SWOOLE_HOOK_STREAM_FUNCTION
常量而不是SWOOLE_HOOK_STREAM_SELECT
新增Library
, 使用純PHP
編寫內核功能而非C/C++
, 提供了以下功能
PHP
模塊Coroutine\WaitGroup
(@twose)PHP
代碼實現CURL的hook, 一鍵使CURL協程化, 目前為實驗特性, 需特別調用Runtime::enableCoroutine(SWOOLE_HOOK_CURL)
來開啟 (@matyhtf) (@Yurunsoft)PHP
代碼實現exec
/shell_exec
的協程化 (#2657) (@Yurunsoft)RuntimeHook
時, 將替換函數array_walk
, array_walk_recursive
為swoole實現的版本, 解決原生函數不可重入的問題, 但會造成無法遍歷object (@matyhtf) (@twose)php.ini
配置swoole.enable_preemptive_scheduler = On
開啟, 相關例子詳見preemptive_scheduler (@shiguangqi)Timer::list()
返回Timer\Iterator
, 可遍歷所有定時器, Timer\clearAll
清除所有定時器, Timer\info(int $id)
獲取定時器信息, Timer::stats()
獲取全局定時器狀態 (#2498) (@twose)Co\Socket
的兩個方法getOption
和 setOption
(9d13c29) (@matyhtf)Process\Pool
的$master_pid
屬性和 shutdown
方法 (a1d6eaa) (@matyhtf)Process\Pool
的構造方法的第四個參數, 為true時底層將自動在onWorkerStart
回調開啟協程 (8ceb32cd) (@matyhtf)stream_socket_pair
協程化支持 (#2546) (@matyhtf)Http\Server
的static_handler_locations
設置, 可以設定靜態文件路徑 (@matyhtf)Co\Http\Client->setBasciAuth
方法, 用於自動發送Authorization
頭 (#2542) (@hongbshi)Co\Http2\Client->ping
方法 (40041f6) (@shiguangqi)hook_flags
配置項,用於取代Runtime::enableCoroutine()
函數調用全新的協程MySQL
客戶端驅動, 底層全面協程化 (#2538) (@twose)
C++
和協程的編程模式(同步阻塞寫法, 非同步性能)['ssl' => true]
即可, 暫不支持證書等配置)fetch
按行讀取 (現在的fetch
為按需讀取, 未fetch的數據不會耗費用戶內存) (#2106)nextResult
按需讀取 (同上)close
后, 客戶端持有的statements
自動轉為不可用狀態, 避免邊界問題date
相關類型小數精度支持PDO
/mysqli
保持一致Co\Redis
兼容模式, 通過$redis->set(['compatibility_mode' => true])
開啟, 可使得hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore
等方法返回結果和phpredis
保持一致 (#2529) (@caohao-php)100K
個協程同時存在 (c69d320b) (@twose)bailout
機制 (協程內發生致命錯誤時能正確退出進程) (#2579) (@twose)Server
發生錯誤時會根據情況展示友好的400/404/503
界面而不是沒有任何輸出 (@matyhtf) (f3f2be9d)Server
默認開啟非同步安全重啟特性和超大數據發送的自動協程調度功能 (#2555) (9d4a4c47) (@matyhtf)Server
的onFinish
回調支持自動協程環境 (@twose)Http
客戶端默認開啟websocket_mask
, 不再會出現莫名其妙連不上websocket
的問題 (c02f4f85) (@twose)Channel
的調度操作 (519b6043) (@twose)WebSocket
握手失敗時切斷連接 (#2510) (@twose)Linux
下父進程異常退出時底層會自動發送信號殺死子進程 (4b833a3d) (@matyhtf)Socket->recv
的數據長度不足時回收末尾無用的內存 (642a3552) (@twose)Server->bind
在uid
超過UINT32_MAX
時會產生警告並返回PHP7.4
(#2506) (@twose)Process\Pool
的getProcess
問題 (#2522) (@matyhtf)fork
后產生的內存泄漏 (8f3abee7) (@twose)enable_coroutine
和task_enable_coroutine
一開一關的問題 (#2585) (@matyhtf)Co\Http\Client->setCookies
在特殊情況下的內存錯誤 (#2644) (@Yurunsoft)arginfo_swoole_process_pool_getProcess
(#2658) (@mabu233)static_handler
不支持軟鏈接 (@matyhtf)OSX
下卡死 (22504dd4) (@matyhtf)SSL
后task
進程使用Server->getClientInfo
出錯 (#2639) (@matyhtf)Swoole\Coroutine\Scheduler
調度器類作為cli
命令行腳本的入口,取代go() + Swoole\Event::wait()
的方式Swoole\Coroutine\Run
函數,提供對Swoole\Coroutine\Scheduler
的封裝go() + Swoole\Event::wait()
的運行方式可能被廢除Windows
支持計劃System
或Scheduler
模塊, 廢除util模塊Co\Http2\Client
底層協程化 (f64874c3) (@matyhtf)5.0
新增的Co\Server
和Co\Http\Server
CURL Hook
(暫時不支持curl_multi
)
[admin
]