🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 介绍 `Swoole`是一个使用`C++`语言编写的基于异步事件驱动和协程的并行网络通信引擎,为`PHP`提供[协程](https://wiki.swoole.com/zh-cn/#/coroutine)、[高性能](https://wiki.swoole.com/zh-cn/#/question/use?id=how-is-the-performance-of-swoole)网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现`TCP/UDP服务`、`高性能Web`、`WebSocket服务`、`物联网`、`实时通讯`、`游戏`、`微服务`等,使`PHP`不再局限于传统的 Web 领域。 经过数月的开发和测试工作,Swoole v6 的第一个版本终于发布了。 ## Swoole V6.0 `Swoole v6`版本引入多线程+协程的编程模式支持。既可以拥有协程并发`IO`编程的便利,又可以拥有多线程并行执行、共享内存堆栈的优势。这使得`PHP`在开发游戏服务器、通信服务器方面更有效率。 Swoole V6.0 将为 PHP 带来稳定可靠、生产可用的多线程方案。欢迎各位进行试用,为我们提交测试报告和问题反馈。 ## 新特性: * `Swoole`支持多线程模式,当`php`是`zts`模式,编译`Swoole`时开启`--enable-swoole-thread`时,就能使用多线程模式。 * 新增线程管理类`Swoole\Thread`。 [@matyhtf](https://github.com/matyhtf) * 新增线程锁`Swoole\Thread\Lock`。 [@matyhtf](https://github.com/matyhtf) * 新增线程原子计数`Swoole\Thread\Atomic`,`Swoole\Thread\Atomic\Long`。 [@matyhtf](https://github.com/matyhtf) * 新增安全并发容器`Swoole\Thread\Map`,`Swoole\Thread\ArrayList`,`Swoole\Thread\Queue`。 [@matyhtf](https://github.com/matyhtf) * 文件异步操作支持`iouring`作为底层引擎,安装了`liburing`和编译`Swoole`时开启`--enable-iouring`,`file_get_contents`,`file_put_contents`,`fopen`,`fclose`,`fread`,`fwrite`,`mkdir`,`unlink`,`fsync`,`fdatasync`,`rename`,`fstat`,`lstat`,`filesize`这些函数的异步操作将会由`iouring`实现。 [@matyhtf](https://github.com/matyhtf) [@NathanFreeman](https://github.com/NathanFreeman) * 升级`Boost Context`版本到1.84。现在,龙芯CPU也能够支持协程了。 [@NathanFreeman](https://github.com/NathanFreeman) ## 示例 **创建线程:** ~~~ use Swoole\Thread; ~~~ **线程 + 服务端(异步风格)** ~~~ use Swoole\Process; ~~~ **Thread + Coroutine 在线程中使用协程** ~~~ use Swoole\Thread; ~~~ **并发 Map** ~~~ use Swoole\Thread; ~~~ Bug修复: * 修复无法通过`pecl`安装的问题。 [@remicollet](https://github.com/remicollet) * 修复`Swoole\Coroutine\FastCGI\Client`客户端无法设置keepalive。 [@NathanFreeman](https://github.com/NathanFreeman) * 修复请求参数超过`max_input_vars`时会抛出错误导致进程不断重启的问题。 [@NathanFreeman](https://github.com/NathanFreeman) * 修复在协程中使用`Swoole\Event::wait()`导致的未知问题。 [@matyhtf](https://github.com/matyhtf) * 修复`proc_open`在协程化的时候不支持pty的问题。 [@matyhtf](https://github.com/matyhtf) * 修复`pdo_sqlite`在PHP8.3会出现段错误的问题。 [@NathanFreeman](https://github.com/NathanFreeman) * 修复编译`Swoole`时的无用警告。 [@Appla](https://github.com/Appla) [@NathanFreeman](https://github.com/NathanFreeman) * 修复如果`STDOUT/STDERR`已经关闭时,底层调用zend\_fetch\_resource2\_ex会抛出错误。 [@Appla](https://github.com/Appla) [@matyhtf](https://github.com/matyhtf) * 修复无效的`set_tcp_nodelay`配置。 [@matyhtf](https://github.com/matyhtf) * 修复文件上传的时候偶尔会触发不可达的分支问题。 [@NathanFreeman](https://github.com/NathanFreeman) * 修复设置了`dispatch_func`,会导致php底层抛出错误的问题。 [@NathanFreeman](https://github.com/NathanFreeman) * 修复AC\_PROG\_CC\_C99在autoconf >= 2.70版本中已过时。 [@petk](https://github.com/petk) * 当线程创建失败时,捕获其抛出的异常。 [@matyhtf](https://github.com/matyhtf) * 修复`_tsrm_ls_cache`未定义问题。 [@jingjingxyk](https://github.com/jingjingxyk) * 修复在`GCC 14`编译会导致致命错误。 [@remicollet](https://github.com/remicollet) ## 内核优化 * 移除对`socket structs`的无用检查。 [@petk](https://github.com/petk) * 升级swoole Library。 [@deminy](https://github.com/deminy) * `Swoole\Http\Response`增加对451状态码的支持。 [@abnegate](https://github.com/abnegate) * 同步PHP不同版本的`文件`操作代码。 [@NathanFreeman](https://github.com/NathanFreeman) * 同步PHP不同版本的`pdo`操作代码。 [@NathanFreeman](https://github.com/NathanFreeman) * 优化`Socket::ssl_recv()`的代码。 [@matyhtf](https://github.com/matyhtf) * 优化了config.m4,一些配置可以通过`pkg-config`设置依赖库位置。 [@NathanFreeman](https://github.com/NathanFreeman) * 优化`解析请求头`的时候使用动态数组的问题 。 [@NathanFreeman](https://github.com/NathanFreeman) * 优化在多线程模式下,文件描述符`fd`的生命周期问题。 [@matyhtf](https://github.com/matyhtf) * 优化协程一些基本逻辑。 [@matyhtf](https://github.com/matyhtf) ## 废弃 * 不再支持`PHP 8.0` * 不再支持`Swoole\Coroutine\MySQL`协程客户端 * 不再支持`Swoole\Coroutine\Redis`协程客户端 * 不再支持`Swoole\Coroutine\PostgreSQL`协程客户端