Swoole 4.4.1 发布了,更新内容如下:

 Swoole 4.4 正式版已发布,该版本包含大量更新,详细信息如下:

修复

  • 修复 SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER,解决SSL下大数据包发送失败
    (#2667)
    (@twose)
  • 修复信号监听功能的BUG
    (#2675)
    (@matyhtf)
  • 修复MySQL客户端向下不兼容的变化
    (#2674)
    (@twose)
  • 修复在Server启动之后添加事件失败
    (#2673)
    (@matyhtf)
  • 修复static_handler没有解码url澳门新葡亰8455下载app,,现已支持中文路径
    (#2676)
    (@twose)
  • 修复task进程由于平滑退出造成的警告
    (#2689)
    (@Yurunsoft)
  • 修复 HttpRequest->rawContent在协程Server下的问题
    (#2682)
    (@twose)
  • 修复 Timer::clearAll的内存错误
    (6b0263b)
    (@matyhtf)
  • 修复CoroutineHttpClient在高并发下发送大数据包失败的BUG
    (432259d)
    (@twose)

向下不兼容改动

  • 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操作失败后更新

增强

  • 支持发送带Content-length但无主体的HTTP响应给HEAD请求
    (#2690)
    (@matyhtf)
  • 支持获取任意协程的父协程ID (#2669)
    (@huanghantao)

废弃警告

  • 将废弃Buffer模块,废弃原因:可替代性强,使用率低,可用PHP字符串、fopen("memory")代替。
  • 将废弃Lock模块,废弃原因:在协程模式下加锁可能存在问题,可使用chan实现协程版本的锁
  • 由于引入了stream_socket_pair协程化, 建议开启hook时,
    如有单独配置需求,
    请使用SWOOLE_HOOK_STREAM_FUNCTION常量而不是SWOOLE_HOOK_STREAM_SELECT

企业版

Swoole
Enterprise 作为 Swoole 官方出品的一整套企业级PHPSwoole分析调试工具,可免费使用但不开源。

  • 时刻掌握应用架构模型:
    自动发现应用依赖拓扑结构和展示,时刻掌握应用的架构模型
  • 分布式跨应用链路追踪:支持无侵入的分布式跨应用链路追踪,让每个请求一目了然,全面支持协程/非协程环境,数据实时可视化
  • 全面分析报告服务状况:各种维度统计服务上报的调用信息,
    比如总流量、平均耗时、超时率等,并全面分析报告服务状况
  • 拥有强大的调试工具链:系统支持远程调试,可远程开启检测内存泄漏、阻塞检测和代码性能分析
  • 完善的系统监控:支持完善的系统监控,零成本部署,监控机器的CPU、内存、网络、磁盘等资源,可以很方便的集成到现有报警系统
  • 零成本接入系统:Swoole Enterprise系统客户端脚本一键部署,服务端可在Docker环境中运行,简单快捷

新特性

  • 新增Library, 使用纯PHP编写内核功能而非C/C++, 提供了以下功能

    • 新增高质量PHP模块CoroutineWaitGroup (@twose)
    • 使用PHP代码实现CURL的hook, 一键使CURL协程化, 目前为实验特性,
      需特别调用Runtime::enableCoroutine(SWOOLE_HOOK_CURL)来开启 (@matyhtf)
      (@Yurunsoft)
    • 使用PHP代码实现exec/shell_exec的协程化
      (#2657) (@Yurunsoft)
    • 开启RuntimeHook时,
      将替换函数array_walkarray_walk_recursive为swoole实现的版本,
      解决原生函数不可重入的问题, 但会造成无法遍历object (@matyhtf)
      (@twose)
  • 新增协程抢占式调度器, 可防止协程占用CPU时间过长导致其它协程饿死,
    通过php.ini配置swoole.enable_preemptive_scheduler = On 开启,
    相关例子详见preemptive_scheduler (@shiguangqi)

  • 新增Timer::list()返回TimerIterator,
    可遍历所有定时器, TimerclearAll清除所有定时器, Timerinfo(int $id)获取定时器信息, Timer::stats()获取全局定时器状态
    (#2498) (@twose)
  • 新增 CoSocket的两个方法getOption 和 setOption (9d13c29) (@matyhtf)
  • 新增 ProcessPool$master_pid 属性和 shutdown方法
    (a1d6eaa) (@matyhtf)
  • 新增ProcessPool的构造方法的第四个参数,
    为true时底层将自动在onWorkerStart回调开启协程
    (8ceb32cd) (@matyhtf)
  • 新增stream_socket_pair协程化支持 (#2546) (@matyhtf)
  • 新增HttpServerstatic_handler_locations设置,
    可以设定静态文件路径 (@matyhtf)
  • 新增CoHttpClient->setBasciAuth方法,
    用于自动发送Authorization头 (#2542) (@hongbshi)
  • 新增 CoHttp2Client->ping方法 (40041f6) (@shiguangqi)
  • 新增hook_flags配置项,用于取代Runtime::enableCoroutine()函数调用

版本更新

  • 调试器功能 :
    通过Swoole企业版后台PHP进程列表的按钮,动态开启/关闭某一个PHP进程的内存泄漏检测,性能分析和阻塞检测,可以导出请求的函数调用性能分析图、火焰图
  • 应用追踪功能:将应用追踪(trace)与性能分析数据和阻塞检测的数据做关联,可以互相跳转,方便多维度定位性能问题
  • 报警功能:增加磁盘/cpu/内存使用率的监控报警,当系统资源超过阈值自动发微信/短信报警

增强

  • 全新的协程MySQL客户端驱动, 底层全面协程化 (#2538) (@twose)

    • 底层使用C++和协程的编程模式(同步阻塞写法, 异步性能)
    • 支持SSL连接 (connect时配置 ['ssl' => true]即可,
      暂不支持证书等配置)
    • 支持超大数据发送 (无上限, 底层自动拼包,
      上限为MySQL服务器配置上限)
    • 支持超大数据接收
    • 支持fetch按行读取 (现在的fetch为按需读取,
      未fetch的数据不会耗费用户内存)
      (#2106)
    • 支持nextResult按需读取 (同上)
    • 客户端close后, 客户端持有的statements自动转为不可用状态,
      避免边界问题
    • 优化掉了一些不必要的内存拷贝(协议解析时)
    • date相关类型小数精度支持
    • 错误代码和信息与PDO/mysqli保持一致
  • CoRedis兼容模式,
    通过$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)
  • ServeronFinish回调支持自动协程环境 (@twose)
  • Http客户端默认开启websocket_mask,
    不再会出现莫名其妙连不上websocket的问题 (c02f4f85) (@twose)
  • 不再允许在协程外使用Channel的调度操作 (519b6043) (@twose)
  • WebSocket握手失败时切断连接 (#2510) (@twose)
  • Linux下父进程异常退出时底层会自动发送信号杀死子进程
    (4b833a3d) (@matyhtf)
  • Socket->recv的数据长度不足时回收末尾无用的内存
    (642a3552) (@twose)
  • 浮点数计算误差优化 (#2572) (@tangl163)
  • 所有内置类都 禁止克隆/禁止序列化/禁止删除底层定义的属性
    (f9c974b8) (@twose)
  • Server->binduid超过UINT32_MAX时会产生警告并返回
  • 兼容PHP7.4 (#2506) (@twose)
网站地图xml地图