Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions v6.1.md
Original file line number Diff line number Diff line change
@@ -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('<int, string>');
$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 因你们而更强大!愿开源社区伙伴身体健康,万事如意,工作顺利。