PHP官方保持一致, 不再支持PHP7.0 (@matyhtf)Serialize模块, 在单独的 ext-serialize 扩展中维护. 废弃原因: 由于PHP内核频繁变更, 导致无法实现稳定可用的模块, 与php serialize相比没有太大差异化定位PostgreSQL模块,在单独的 ext-postgresql 扩展中维护. 废弃原因: PostgreSQL使用了异步回调方式实现协程调度, 不符合目前内核协程化的统一规划。另外PostgreSQL目前用户量非常低, 并且缺少必要的单元测试, 无法保证质量Runtime::enableCoroutine不再会自动兼容协程内外环境, 一旦开启, 则一切阻塞操作必须在协程内调用 (@matyhtf)由于引入了全新的协程MySQL客户端驱动, 底层设计更加规范, 但有一些小的向下不兼容的变化
fetch/nextResult优化为按需读取, 会产生IO调度defer特性时, statement发出的的请求, 需要使用statement->recv接收defer/fetch_mode特性时, 如有未接收完的数据, 将无法发起新的请求connected属性不再会实时基于事件更新, 而是在IO操作失败后更新Buffer模块,废弃原因:可替代性强,使用率低,可用PHP字符串、fopen("memory")代替。Lock模块,废弃原因:在协程模式下加锁可能存在问题,可使用chan实现协程版本的锁stream_socket_pair协程化, 建议开启hook时, 如有单独配置需求, 请使用SWOOLE_HOOK_STREAM_FUNCTION常量而不是SWOOLE_HOOK_STREAM_SELECT新增Library, 使用纯PHP编写内核功能而非C/C++, 提供了以下功能
PHP模块Coroutine\WaitGroup (@twose)PHP代码实现CURL的hook, 一键使CURL协程化, 目前为实验特性, 需特别调用Runtime::enableCoroutine(SWOOLE_HOOK_CURL)来开启 (@matyhtf) (@Yurunsoft)PHP代码实现exec/shell_exec的协程化 (#2657) (@Yurunsoft)RuntimeHook时, 将替换函数array_walk, array_walk_recursive为swoole实现的版本, 解决原生函数不可重入的问题, 但会造成无法遍历object (@matyhtf) (@twose)php.ini配置swoole.enable_preemptive_scheduler = On 开启, 相关例子详见preemptive_scheduler (@shiguangqi)Timer::list()返回Timer\Iterator, 可遍历所有定时器, Timer\clearAll清除所有定时器, Timer\info(int $id)获取定时器信息, Timer::stats()获取全局定时器状态 (#2498) (@twose)Co\Socket的两个方法getOption 和 setOption (9d13c29) (@matyhtf)Process\Pool的$master_pid 属性和 shutdown方法 (a1d6eaa) (@matyhtf)Process\Pool的构造方法的第四个参数, 为true时底层将自动在onWorkerStart回调开启协程 (8ceb32cd) (@matyhtf)stream_socket_pair协程化支持 (#2546) (@matyhtf)Http\Server的static_handler_locations设置, 可以设定静态文件路径 (@matyhtf)Co\Http\Client->setBasciAuth方法, 用于自动发送Authorization头 (#2542) (@hongbshi)Co\Http2\Client->ping方法 (40041f6) (@shiguangqi)hook_flags配置项,用于取代Runtime::enableCoroutine()函数调用全新的协程MySQL客户端驱动, 底层全面协程化 (#2538) (@twose)
C++和协程的编程模式(同步阻塞写法, 异步性能)['ssl' => true]即可, 暂不支持证书等配置)fetch按行读取 (现在的fetch为按需读取, 未fetch的数据不会耗费用户内存) (#2106)nextResult按需读取 (同上)close后, 客户端持有的statements自动转为不可用状态, 避免边界问题date相关类型小数精度支持PDO/mysqli保持一致Co\Redis兼容模式, 通过$redis->set(['compatibility_mode' => true])开启, 可使得hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore等方法返回结果和phpredis保持一致 (#2529) (@caohao-php)100K个协程同时存在 (c69d320b) (@twose)bailout机制 (协程内发生致命错误时能正确退出进程) (#2579) (@twose)Server发生错误时会根据情况展示友好的400/404/503界面而不是没有任何输出 (@matyhtf) (f3f2be9d)Server默认开启异步安全重启特性和超大数据发送的自动协程调度功能 (#2555) (9d4a4c47) (@matyhtf)Server的onFinish回调支持自动协程环境 (@twose)Http客户端默认开启websocket_mask, 不再会出现莫名其妙连不上websocket的问题 (c02f4f85) (@twose)Channel的调度操作 (519b6043) (@twose)WebSocket握手失败时切断连接 (#2510) (@twose)Linux下父进程异常退出时底层会自动发送信号杀死子进程 (4b833a3d) (@matyhtf)Socket->recv的数据长度不足时回收末尾无用的内存 (642a3552) (@twose)Server->bind在uid超过UINT32_MAX时会产生警告并返回PHP7.4 (#2506) (@twose)Process\Pool的getProcess问题 (#2522) (@matyhtf)fork后产生的内存泄漏 (8f3abee7) (@twose)enable_coroutine和task_enable_coroutine一开一关的问题 (#2585) (@matyhtf)Co\Http\Client->setCookies在特殊情况下的内存错误 (#2644) (@Yurunsoft)arginfo_swoole_process_pool_getProcess (#2658) (@mabu233)static_handler不支持软链接 (@matyhtf)OSX下卡死 (22504dd4) (@matyhtf)SSL后task进程使用Server->getClientInfo出错 (#2639) (@matyhtf)Swoole\Coroutine\Scheduler调度器类作为cli命令行脚本的入口,取代go() + Swoole\Event::wait()的方式Swoole\Coroutine\Run函数,提供对Swoole\Coroutine\Scheduler的封装go() + Swoole\Event::wait()的运行方式可能被废除Windows支持计划System或Scheduler模块, 废除util模块Co\Http2\Client底层协程化 (f64874c3) (@matyhtf)5.0新增的Co\Server和Co\Http\ServerCURL Hook(暂时不支持curl_multi)(文/开源中国)