PHP 基金會宣布:Streams 現代化 將引入事件循環與異步新能力
PHP 基金會宣布:Streams 現代化 將引入事件循環與異步新能力
得益于德國政府支持的開源基礎設施機構 Sovereign Tech Agency (STA) 的投資,PHP 基金會正在為 PHP 最古老且至關重要的子系統之一——Streams——推進現代化改造。本文整理了基金會公布的計劃,并解釋這些變革對 PHP 生態的重要性。
總結就是一句話,PHP Stream 要加入事件循環了。
原文鏈接 PHP 基金會宣布:Streams 現代化 將引入事件循環與異步新能力
什么是 PHP Streams?
在討論具體改進之前,先回顧一下 Streams 的概念以及它的意義。
自 2001 年左右引入以來,PHP Streams 提供了一種統一處理文件與網絡 I/O 的方式,使文件、套接字或內存等不同來源的數據都能通過一致的 API 與同一組函數訪問。
隨著時間推移,PHP Streams 被證明既強大又靈活,但部分實現沒有跟上現代用例、性能預期和系統能力的演進。本次計劃旨在讓 Streams 更快、更安全,也更易于為現代 PHP 應用擴展。
整個工作范圍被劃分為四個子項目。
性能與穩定性提升
這一部分關注的是改進 PHP Streams 在復制與定位(seeking)時的性能和一致性。
Stream 復制仍有優化余地。比如復制大文件或處理網絡傳輸時,可以借助 Linux 上的 io_uring 等異步 I/O 機制加速。同時還要避免 memory-mapped 文件可能引發的崩潰。因此目標是逐步淘汰 mmap 的使用,并在即將推出的 I/O API 中引入新的復制 API,在可用的平臺上調用 io_uring 或其他系統特性。
當前 filtered streams 的尋址存在問題,導致行為出現不一致。開發者在使用 filters 時,經常會遇到無法回到開頭或跳過數據的限制。
計劃將引入新的尋址 filter API,讓可尋址的 stream 支持 seeking,并在不支持的情況下明確禁止。例如,回到開頭應該始終可行,但并非所有 filter 都支持任意位置的尋址;有些可以,有些不行,因此基金會希望通過全新的內部 API 來表達這些差異。
錯誤處理與監控增強
這一部分主要聚焦新的錯誤報告機制及更多 hooks。目前,很多底層 I/O 錯誤在用戶態的呈現并不一致。目標是標準化 Streams 的錯誤報告方式,便于開發者調試。
新的錯誤報告思路是:在更完善的錯誤處理框架下,將錯誤收集并回傳給用戶態。基金會將對現有錯誤進行封裝,并提供更豐富的上下文,幫助開發者定位問題。
至于 hooks,則會通過特殊的 polling wrapper 支持 async 代碼,使部分阻塞操作(尤其是 file IO)能夠被替換。此改動主要面向內部實現,如果性能允許,團隊也會評估是否把部分 hooks 暴露給用戶態。
網絡與套接字改進
這一部分集中在引入全新的 polling API、改進 stream_select,并解決套接字相關的問題。
現代網絡應用高度依賴可擴展的事件處理能力。新的 polling API 將引入 epoll、kqueue 等現代機制,幫助 PHP 更高效地管理多路 I/O Streams。
目前用戶態只有 select 可用,而它在性能和擴展性上的瓶頸早已顯現。這次現代化將直接惠及實現 async networking 或事件驅動 I/O 的框架與擴展。
這一 API 的主要目標,是在核心內部建立一套可復用的接口,既能服務于 PHP 內部的各種任務,也能作為未來 async IO API 的基礎(或者備用方案)。
團隊還會擴展 stream_select 的用法,讓它更好地支持 filtered streams 的 polling,并為能夠提供額外數據的外部對象暴露 API,與新的 polling API 的能力保持一致。為此需要適度重構,部分邏輯也可能與新 API 共享。
此外,計劃對套接字進行多項改進。團隊計劃新增 socket context options,提供更靈活的配置能力;修復若干套接字處理問題,并強化 file descriptor 相關的實用工具。
安全與 TLS 增強
另一項重要工作聚焦在處理加密 Streams 的 OpenSSL 擴展。
團隊準備重構當前并不完善、限制較多的 async 處理邏輯。完成后,將能更清楚地告知用戶態需要何種 polling 動作,例如該 stream 應該等待讀操作還是寫操作。
此外,改進計劃也強化了 TLS 1.3 支持,允許選擇特定的 cipher suites,并整合 TLS Sessions、PSK(Pre-Shared Key)以及 early data(0-RTT)。
為支撐這些改動,基金會團隊正在開發新的 TLS 1.3 PHP 測試庫,便于自定義協議流程,并測試 TLS 1.3 的諸多特性,包括異步行為。
影響:對 PHP 生態與異步框架的啟示
這些舉措將共同推動 PHP 的 I/O 層在未來十年持續服務于 Web 與 CLI 的發展需求。
相關工作已經在 2025 年啟動,并將持續推進至 2026 年。PHP Foundation 會通過官方更新、PHP internals 討論以及 RFC 持續公開階段性成果。
對更廣泛的 PHP 生態而言,這輪 Streams 現代化不僅改善了底層 I/O 能力,也為異步框架鋪平了道路。像 workerman/ReactPHP 這樣依賴持續連接與事件循環的常駐內存框架,將能借助新的 polling API 進一步降低上下文切換成本,并在高并發場景中獲得更穩定的資源利用率。隨著 Streams 層統一錯誤處理、權限控制與 TLS 能力,也期待更多基于這些 API 的擴展與框架出現,在 WebSocket、RPC、物聯網等實時業務里釋放新一輪性能潛力。

浙公網安備 33010602011771號