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、物联网等实时业务里释放新一轮性能潜力。

相关推荐
星辰徐哥1 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥1 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约1 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee1 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐1 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs1 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐1 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司1 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪1 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
追逐时光者2 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
后端·.net