From c7f4bf0a63cbfed07e98dfcc83356cc1f0acaec2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 12:55:30 +0000 Subject: [PATCH 1/2] Initial plan From 553fbfe1526000835a82b3e47692d9df35de13d7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:02:05 +0000 Subject: [PATCH 2/2] Create Swoole v6.1.0 RC1 release notes documentation Co-authored-by: matyhtf <2017766+matyhtf@users.noreply.github.com> --- v6.1.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 v6.1.md diff --git a/v6.1.md b/v6.1.md new file mode 100644 index 0000000..ecc70a1 --- /dev/null +++ b/v6.1.md @@ -0,0 +1,87 @@ +# Swoole v6.1.0 RC1 版本更新记录 + +## **标准库扩展** + +`6.1` 版本 `Swoole-Cli` 将增加 `PHP` 标准库扩展语法,在保持对 `PHP` 官方语法完整兼容的同时,提供一些额外的新语法。这些新的扩展语法均是可选的,不影响现有的`PHP`代码。标准库扩展语法将在`ext-swoole`的`stdext`模块中实现。 + +- `swoole-cli` 用户,可直接使用,无需设置任何额外的参数 +- `ext-swoole` 的用户,需在编译时添加`--enable-swoole-stdext`来启用 +- `stdext` 在 `php-cli`、`php-fpm`、`cli-http-server`、`swoole` 模式均可使用 + +### **1. 基础类型对象化** + +`6.1` 版本实现了`array`/`string`/`stream`基础类型的对象化封装,支持面向对象风格的方法调用,可直接对这些类型的变量调用内置方法。 + +基础类型的内置方法实际上仍然是调用`PHP`标准库实现的,内置方法与`PHP`的`str_`或`array_`系列函数是一一对应关系,例如`$text->replace()`对应的函数是`str_replace`。底层仅调整了函数名称,少量方法调整了参数顺序,还有几个方法调整了参数和返回值类型,详情请查看 [Swoole 文档](https://wiki.swoole.com/)。 + +```php +$text = 'Hello Swoole'; +var_dump($text->length()); +echo $text->lower()->replace("swoole", "php"); +``` + +### **2. Typed-Array 强类型数组** + +可限制数组类型,如:`Map`或`ArrayList`,以及限制`key`与`value`的类型。支持多层嵌套格式。`typed array`实际上依然是`array`类型,底层仅在写入时进行参数检查。`typed array`可作为`array`传递给其他函数或类方法。 + +```php +$array = typed_array(''); +$array[1000] = "hello"; // 正确 +$array[2000] = 2025; // 错误,抛出异常 +``` + +## ✨ **新特性** +- **llHTTP 默认解析器**:自 v6.1.0 起,Swoole 采用性能更优的 `llhttp` 替代 `http_parser` 作为默认 HTTP 报文解析器。 +- **协程化文件下载**:`Swoole\Coroutine\Http\Client` 现支持完整的协程化文件下载操作。 +- **异步文件截断**:新增 `iouring ftruncate` 支持,扩展异步文件操作能力。 + +## 🐛 **Bug 修复** +- **线程模式优化**: + - 修复 `SWOOLE_THREAD` 模式下 `hook_flags` 设置失效问题。 + - 解决线程模式下 `max_request` 重启时的内存访问失效的问题。 + - 修复不支持单独重启`Task`进程的问题。 +- **稳定性提升**: + - 修复同步进程(含 manager 进程和 task 进程)无法正常使用`process::signal()`的问题。 + - 修正工作进程异常退出时的资源清理机制。 + - 解决 Cygwin 平台编译失败问题。 + - 修复curl开启keepalive无法复用socket的问题。 + - 改进日志组件以解决多线程模式下的数据一致性问题。 + - 修复`io_uring`的`futex`特性在`ubuntu24.04`编译失败的问题。 + - 修复结构体顺序赋值在低版本的linux系统会编译失败的问题。 + - 修复底层`swoole_cpu_set_to_array`函数的缺陷。 + - 修复`Swoole\Process`类缺少`id`属性的问题。 +- **兼容性改进**: + - 修复 PHP 8.5 下 `php_swoole_register_shutdown_function` 兼容性问题。 + - 修正 `Swoole\Table::get()` 对 null 参数的处理。 +- **协议处理**: + - 优化`HTTP`头重复合并逻辑。 + - 修复系统无`zlib`支持时,客户端请求`Accept-Encoding`含`zlib`会触发未知压缩方法警告的问题。 + +## 废弃 +- 不再支持`select`事件机制,`select`仅支持`1024`个句柄的事件监听,存在严重缺陷,在不支持`epoll/kqueue`的平台将使用`poll`作为事件轮训机制,这使得`Cygwin`平台下也可以支持大量并发 +- 在`Swoole\Server::stop()`方法中,第二个参数`$waitEvent`已被废弃,请使用`reload_async`参数 + +## 🛠️ **架构优化** +- 经过持续优化,我们成功实现了单元测试覆盖率86%的重要突破。通过系统性地补充测试用例并重构底层代码逻辑,同时结合clang-tidy工具链开展全量静态代码分析,实现了代码的自动化格式规整与冗余清理,使得代码可读性与可维护性得到显著提升。 +- 优化底层`SSL`模块。 +- 优化底层`Socket`模块。 +- 重构底层同步信号模块。 +- 重构底层`reactor`和`string`模块。 +- 重构底层基于SIGRTMIN信号实现日志文件动态重载。 +- 优化底层静态文件服务器,移除C风格代码,统一为C++风格的代码。 +- 优化线程初始化逻辑,提高多线程性能,独立管理结构内存,线程创建和退出不需要再加锁。 +- 移除底层`async`模块中的`socket_dontwait`选项,该选项已废弃。 +- 完善WebSocket掩码处理的测试覆盖。 +- 优化`sendfile`功能,当文件小于`64KB`时不设置`tcp_cork`选项。 +- 增加aarch64和macOS环境下的单元测试。 +- 优化底层客户端网络地址解析和设置。 +- 对于Swoole\Server模块,增加了`ssl_cafile/ssl_capath`配置项。 +- 增加`print_backtrace_on_error`配置,此配置可以在发生位置错误时候,打印C函数的堆栈。 +- 增加`Address Sanitizer`调试工具。 +- 在 macOS 系统中,由于 kqueue 事件机制不支持跨进程管道事件监听,导致无法使用 process 模式和 task 进程功能。因此,系统将默认采用 poll 作为底层事件机制。如需启用 kqueue,可以通过`Swoole\Server::set(['enable_kqueue' => true])`和`swoole_async_set(['enable_kqueue' => true])`方法手动开启。 + +## ⚠️ **注意** +- 该版本为`RC`版本非正式版,仅推荐在测试环境中使用,不建议在生产环境中使用。 + +## 🙏 **致谢** +诚挚感谢 @matyhtf @jingjingxyk @KIMDONGYEON00 @ServBayDev @NathanFreeman 所有贡献者的专业付出,Swoole 因你们而更强大!愿开源社区伙伴身体健康,万事如意,工作顺利。 \ No newline at end of file