• 反腐败国际合作"朋友圈"又大了! 2019-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • Swoole 4.4 正式版已发布,包含大量更新

    matyhtf
     matyhtf
    发布于 2019年07月10日
    收藏 6

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

    向下不兼容改动

    • 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???code>Coroutine\WaitGroup (@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()返回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\Serverstatic_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连接 (connect时配置 ['ssl' => true]即可, 暂不支持证书等配置)
      • 支持超大数据发送 (无上限, 底层自动拼包, 上限为MySQL服务器配置上限)
      • 支持超大数据接收
      • 支持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)
    • 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)

    修复

    • 修复Process\PoolgetProcess问题 (#2522) (@matyhtf)
    • 修复某些特殊情况下异常被忽略的问题(VM陷入了事件循环而没有机会检查异常) (@twose)
    • 修复定时器在进程fork后产生的内存泄漏 (8f3abee7) (@twose)
    • 修复非Linux系统编译时timezone的问题 (#2584) (@devnexen)
    • 修复enable_coroutinetask_enable_coroutine一开一关的问题 (#2585) (@matyhtf)
    • 修复Http2的trailer方法不输出值为空的头 (#2578) (@twose)
    • 修复Co\Http\Client->setCookies在特殊情况下的内存错误 (#2644) (@Yurunsoft)
    • 修复#2639 (#2656) (@mabu233)
    • 修复arginfo_swoole_process_pool_getProcess (#2658) (@mabu233)
    • 修复static_handler不支持软链接 (@matyhtf)
    • 修复OSX下卡死 (22504dd4) (@matyhtf)
    • 修复启用SSLtask进程使用Server->getClientInfo出错 (#2639) (@matyhtf)
    • 修复多协程操作同一个Socket的非法操作BUG (#2661) (@twose)

    协程调度器?

    • 新增Swoole\Coroutine\Scheduler调度器类作为cli命令行脚本的入口,取代go() + Swoole\Event::wait()的方式
    • 增加Swoole\Coroutine\Run函数,提供对Swoole\Coroutine\Scheduler的封装
    • go() + Swoole\Event::wait()的运行方式可能被废除

    内核

    • 持续的底层代码质量优化工作 (@swoole)
    • 更多的单元测试, 并使用了基于 webmozart/assert 二次开发而来的断言库 swoole/assert (@twose)
    • 补全内存申请失败检测 (b19bebac) (5a1ddad3) (@matyhtf)
    • 彻底废除Windows支持计划
    • 将协程的一些功能整理划分到SystemScheduler??? 废除util???/li>
    • Co\Http2\Client底层协程化 (f64874c3) (@matyhtf)
    • 底层全面缓存了开发者注册的函数信息, 调用回调时速度更快 (@twose)

    实验性内容

    • 可能在5.0新增的Co\ServerCo\Http\Server
    • CURL Hook(暂时不支持curl_multi
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处,尊重他人劳动共创开源社区。
    转载请注明:文章转载自 OSCHINA 社区 广东十一选五推荐号
    本文标题: Swoole 4.4 正式版已发布,包含大量更新
    加载中

    精彩评论

    Icebreaking丶
    Icebreaking丶
    PHP是世界上最好的语言
    宇润
    宇润
    对对对,就这个,复制来的忘记换了??
    宇润
    宇润
    支持,Swoole 越来越好用~各位弹友们,基于 Swoole 的框架 imi 了解一下:https://github.com/Yurunsoft/IMI
    p
    phper08
    越来越完善了

    最新评论(15

    叫你一声你敢答应吗
    为什么要彻底废除windows支持计划?
    玖伍贰柒
    玖伍贰柒
    编译好的swoole在哪下载?????
    p
    phper08
    https://www.swoole.com/page/download
    doyouhaobaby
    doyouhaobaby
    非常强大,升级
    狂暴的大螃蟹
    狂暴的大螃蟹
    php7 更新的太快了
    宇润
    宇润
    支持,Swoole 越来越好用~各位弹友们,基于 Swoole 的框架 imi 了解一下:https://github.com/Yurunsoft/IMI
    红薯
    宇润
    宇润
    对对对,就这个,复制来的忘记换了??
    开源春哥
    开源春哥
    赞!
    p
    phper08
    期待Swoole 5.0!
    p
    phper08
    越来越完善了
    Icebreaking丶
    Icebreaking丶
    PHP是世界上最好的语言
    Minho
    Minho
    应该是宇宙上最好的框架!
    鉴客
    鉴客
    https://gitee.com/swoole/swoole 似乎没同步:)
    matyhtf
    matyhtf
    已更新
    返回顶部
    顶部
  • 反腐败国际合作"朋友圈"又大了! 2019-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • 地下六合彩特码资料 吉林11选5走势图 四川金7乐奖金设置 澳门赌场小姐 2019香港买马资料大全 吉林时时彩稳赢计划 极速11选5官网计划软件下载 贵州11选5任六遗漏 体彩幸运赛车开奖结果 易天百人牛牛怎么玩 一定牛吉林十一选五 线上pk10 百人牛牛赢钱公式打法 福建十一选五规律 重庆快乐十分图表