Skip to content

Latest commit

 

History

History
138 lines (115 loc) · 4.59 KB

v5.md

File metadata and controls

138 lines (115 loc) · 4.59 KB

Swoole 5.0 版本规划

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会全部使用静态编译连接方式,libclibstdc++使用musl,并会包含opensslcurl库和扩展。用户可修改构建脚本添加其他更多三方扩展。 使得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允许自定义构建系统,将扩展添加到模块列表中

移除 php -S 内置服务器

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

移除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可以设置为2Mupload_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将名字解析改为使用ConsulNacos等服务发现插件
  • 增加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()