master
分支不再作为4.9
,将调整为v5.0
- 支持
PHP8.1
- 独立运行(
swoole-cli
) - 强类型,所有函数、类方法的参数、返回值均是有类型的
- 强化底层服务治理能力
- 强制要求
PHP-8.0
以上版本
5.0
将新增swoole-cli
支持,swoole
将像node.js
这样作为独立程序提供给用户,而不是作为PHP
的一个扩展。另外swoole-cli
会尽可能地对php-src
进行裁剪,移除一些不用的机制、模块、扩展、函数、类型、常量、代码,使得整个程序可以在几分钟之内编译完成。
htf@htf-ThinkPad-T470p:~/workspace/php/awsl-psl$ ./swoole-cli -n -v
Swoole 5.0.0 (cli) (built: Nov 26 2021 07:22:46)
swoole-cli
会全部使用静态编译连接方式,libc
和libstdc++
使用musl
,并会包含openssl
和curl
库和扩展。用户可修改构建脚本添加其他更多三方扩展。
使得swoole
程序不再依赖任何系统的so
,可在任意Linux
系统之间复制分发运行。
htf@htf-ThinkPad-T470p:~/workspace/php/awsl-psl$ ldd swoole-cli
不是动态可执行文件
htf@htf-ThinkPad-T470p:~/workspace/php/awsl-psl$
移除 dl()
函数和php.ini
配置extension={name}.so
的动态扩展加载机制,所有扩展必须为静态编译。
swoole-cli
允许自定义构建系统,将扩展添加到模块列表中
在swoole
环境下没有意义
移除使用率低、历史遗留、不支持协程的内置扩展,包括但不限于:
com_dotnet
dba
ftp
ffi
imap
ldap
oci8
odbc
pdo_dblib
pdo_firebird
pdo_oci
pdo_odbc
pdo_pgsql
pgsql
pspell
shmop
snmp
sysvmsg
sysvsem
tidy
移除非 cli
模式、使用率低、历史遗留、不支持协程的内置函数,包括但不限于:
checkdnsrr
dns_check_record
dns_get_mx
header
header_register_callback
header_remove
session_start
mail
移除ZTS
模式,在cli
模式下ZTS
是没有任何意义的。
htf@htf-ThinkPad-T470p:~/workspace/php/awsl-psl$ ./swoole-cli -n -m
[PHP Modules]
Core
curl
date
filter
hash
helper
iconv
inotify
json
openssl
pcntl
pcre
posix
redis
Reflection
session
sockets
SPL
standard
swoole
[Zend Modules]
5.0
版本中依然支持作为PHP
扩展的运行模式,但在下一个大版本6.0
中将会移除扩展支持,只提供swoole-cli
模式
从5.0
开始HTTP
服务器增加了对超大文件上传
的支持,通过设置upload_max_filesize
参数控制允许上传的文件最大尺寸。不同于package_max_length
,超大文件上传功能是将form-data
中的文件内容直接写入临时文件,这样的好处是不会占用太多内存,即可完成超大文件的上传。package_max_length
可以设置为2M
,upload_max_filesize
设置为2G
,每个连接只需要2M
内存即可完成2G
大文件的上传。
$server->set([
'upload_max_filesize' => 2 * 1024 * 1024 * 1024, // 2G
'package_max_length' => 2 * 1024 * 1024, // 2M
]);
- 增加
Server
配置项:max_concurrency
,可限制HTTP1/2
服务的最大并发请求数量,超过之后返回503
错误 - 增加
Coroutine\Http\Client
配置项:max_retries
,在发生连接失败、HTTP 502/503
时自动更换节点进行重试 - 增加
name_resolver
全局配置项,强化域名解析能力,5.0
之前的版本域名只能使用DNS
解析,5.0
之后可配置name_resolver
将名字解析改为使用Consul
或Nacos
等服务发现插件 - 增加
Coroutine::getExecuteTime()
,可获取协程实际执行时间(不包含处于yield
状态的时间) - 增加
upload_max_filesize
配置,允许上传超大文件
- 强类型,所有函数和类方法的参数和返回值增加了类型限定
- 所有构造方法失败时全部修改为抛出异常
- 移除
PSR-0
风格类名,如swoole_http_server
需要修改为Swoole\Http\Server
- 移除自动在
shutdown function
中添加Event::wait()
,必须显式调用Event::wait()
进入事件等待,或者使用Co\run()
、Server::start()
、Process::start()
、Process\Pool::start()
等容器 - 移除
Server::tick/after/clearTimer/defer
别名,直接使用Timer::tick()/Timer::after()/Timer::clear()/Event::defer()