快捷搜索:

您的位置:澳门新葡4473网站 > 项目 > Swoole 4.4 正式版已发布,包含大量更新

Swoole 4.4 正式版已发布,包含大量更新

发布时间:2020-04-21 19:31编辑:项目浏览(71)

     Swoole 4.4 正式版已公布,该版本满含一大波翻新,详细音信如下:

    什么是 Swoft ?

    Swoft 是一款基于 Swoole 扩充完结的 PHP 微服务协程框架。Swoft 能像 Go 近似,内置协程网络服务器及常用的协程客商端且常驻内存,不依赖守旧的 PHP-FPM。有相似 Go 语言的协程操作办法,有周边 Spring Cloud 框架灵活的注释、强大的大局信任注入容器、完备的服务治理、灵活有力的 AOP、规范的 PS奥迪Q5 标准贯彻等等。

    Swoft 通过长达八年的储存和自由化的研究,把 Swoft 营变成 PHP 界的 Spring Cloud, 它是 PHP 高品质框架和微服务治理的特等选项。

    向下不相称改变

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

    Swoft v2.0.7

    2.0.7 在 2.0.6 上连绵起伏扬帆,已在大批量的生育工作中动用,得到众多客商的终将和支撑。正式版本我们做了不菲校勘和优化,具有了越来越好的属性。

    • 新扩充 Http Session 成效组件,提供http会话管理, 扶持多样囤积驱动
    • 巩固 TCP server 央求扶助增加全局或相应的主意中间件
    • 增长 Websocket server 新闻央浼帮忙增添全局或相应的艺术中间件

    抛弃警报

    • 将废弃Buffer模块,吐弃原因:可代替性强,使用率低,可用PHP字符串、fopen("memory")代替。
    • 将废弃Lock模块,扬弃原因:在协程情势下加锁或者存在难题,可接收chan兑现协程版本的锁
    • 出于引进了stream_socket_pair协程化, 提出拉开hook时, 如有单独布置须求, 请使用SWOOLE_HOOK_STREAM_FUNCTION常量并非SWOOLE_HOOK_STREAM_SELECT

    Http Session

    通过 Composer 安装 swoft/session 组件

    • 在项目 composer.json 所在目录实践 composer require swoft/session
    • 将 SwoftHttpSessionSessionMiddleware 中间件参加到全局中间件

    在陈设文件 app/bean.php 里:

        'httpDispatcher'    => [
            // Add global http middleware
            'middlewares'      => [
                SwoftHttpSessionSessionMiddleware::class,
            ],
        ],
    

    暗许是借助当半夏件驱动,保存在 runtime/sessions 目录

    更在驱动只供给铺排对应 handler 类,比方配置 Redis 驱动:

    'sessionHandler' => [
        'class'    => RedisHandler::class,
        // Config redis pool
        'redis' => bean('redis.pool')
    ],
    

    新特性

    • 新增Library, 使用纯PHP编辑内核成效而非C/C++, 提供了以下效率

      • 新添高水平PHP模块CoroutineWaitGroup (@twose)
      • 使用PHP代码达成CULacrosseL的hook, 一键使CUOdysseyL协程化, 前段时间为试验天性, 需特别调用Runtime::enableCoroutine(SWOOLE_HOOK_CURL)来开启 (@matyhtf) (@Yurunsoft)
      • 使用PHP代码达成exec/shell_exec的协程化 (#2657) (@Yurunsoft)
      • 开启RuntimeHook时, 将替换函数array_walkarray_walk_recursive为swoole完结的本子, 清除原生函数不可重入的主题材料, 但会变成不可能遍历object (@matyhtfState of Qatar(@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()函数调用

    Websocket信息中间件

    • 大局中间件

    配置于 app/bean.php:

        /** @see SwoftWebSocketServerWsMessageDispatcher */
        'wsMsgDispatcher' => [
            'middlewares' => [
                AppWebSocketMiddlewareGlobalWsMiddleware::class
            ],
        ],
    
    • 意义于调控器的
    /**
     * Class HomeController
     *
     * @WsController(middlewares={DemoMiddleware::class})
     */
    class TestController
    {}
    

    增强

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

      • 底层使用C++和协程的编制程序情势(同步拥塞写法, 异步质量卡塔尔国
      • 支持SSL连接 (connect时配置 ['ssl' => true]就能够, 暂不援救证书等布置卡塔尔国
      • 支撑十分的大数据发送 (无上限, 底层自动拼包, 上限为MySQL服务器配置上限卡塔尔
      • 扶持比超级大数据接收
      • 支持fetch按行读取 (今后的fetch为按需读取, 未fetch的多少不会损耗客户内部存款和储蓄器State of Qatar(#2106)
      • 支持nextResult按需读取 (同上State of Qatar
      • 客户端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界面实际不是未曾其余输出 (@matyhtfState of Qatar(f3f2be9dState of Qatar
    • Server暗中同意开启异步安全重启性子和比异常的大数据发送的自行协程调节功用(#2555) (9d4a4c47) (@matyhtf)
    • ServeronFinish回调援救活动协程意况 (@twose卡塔尔
    • Http顾客端暗中同意开启websocket_mask, 不再会师世莫明其妙连不上websocket的问题 (c02f4f85) (@twose)
    • 不再允许在协程外使用Channel的调解操作 (519b6043State of Qatar (@twoseState of Qatar
    • WebSocket握手退步时斩断连接 (#2510) (@twose)
    • Linux下父进程极度退出时底层会自行发送功率信号杀死子进度(4b833a3d卡塔尔(قطر‎ (@matyhtf卡塔尔
    • Socket->recv的多寡长度相差时回笼末尾无用的内部存储器(642a3552卡塔尔(قطر‎ (@twose卡塔尔国
    • 浮点数总结绝对误差优化 (#2572) (@tangl163)
    • 负有内置类都 防止克隆/幸免种类化/禁绝删除底层定义的属性 (f9c974b8State of Qatar (@twoseState of Qatar
    • Server->binduid超过UINT32_MAX时会发生警报并回到
    • 兼容PHP7.4 (#2506) (@twose)

    TCP 诉求中间件

    • 全局中间件

    配置于 app/bean.php:

        /** @see SwoftTcpServerTcpDispatcher */
        'tcpDispatcher' => [
            'middlewares' => [
                AppTcpMiddlewareGlobalTcpMiddleware::class
            ],
        ],
    
    • 职能于调整器的
    /**
     * Class DemoController
     *
     * @TcpController(middlewares={DemoMiddleware::class})
     */
    class DemoController
    {
        // ....
    }
    

    修复

    • 修复ProcessPoolgetProcess问题 (#2522) (@matyhtf)
    • 修补有些特殊意况下相当被忽视的难题(VM陷入了事件循环而还未有时机检查非凡卡塔尔 (@twoseState of Qatar
    • 修复电磁打点计时器在进度fork后发生的内部存储器泄漏 (8f3abee7卡塔尔国 (@twose卡塔尔(قطر‎
    • 修补非Linux系统一编写译时timezone的主题素材 (#2584) (@devnexen)
    • 修复enable_coroutinetask_enable_coroutine一开一关的难题(#2585) (@matyhtf)
    • 修补Http2的trailer方法不输出值为空的头 (#2578) (@twose)
    • 修复CoHttpClient->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)

    更多

    • GitHub: 

    • Gitee: 

    • 官网:https://www.swoft.org

    • 文档:

    协程调治器?

    • 新增SwooleCoroutineScheduler调整器类作为cli指令行脚本的进口,替代go() + SwooleEvent::wait()的方式
    • 增加SwooleCoroutineRun函数,提供对SwooleCoroutineScheduler的封装
    • go() + SwooleEvent::wait()的运作形式大概被遗弃

    更新记录

    进级提醒:

    • SwooleWebSocketServer::push 第多少个参数 $finish 在 swoole 4.4.12 后改为了 int 类型。
    • tcp server 的 TcpServerEvent::CONNECT 事件参数保持跟receive, close一致。 $fd, $server 交换个方式置。

    修复(Fixed)

    • 修复 config 注入时,未有找到值也会动用相应档期的顺序的暗中同意值覆盖属性,引致属性私下认可值被掩瞒 d84d50a7
    • 修补 ws server 中运用message调整时,未有过滤空数据,引致多产生一个响应。幸免方法swoft-cloud/swoft#1002 d84d50a7
    • 修补 tcp server 中应用message调节时,未有过滤空数据,招致多发生三个响应。07a01ba1
    • 修复 独立使用console组件时缺乏 swoft/stdlib 库依赖 c569c81a
    • 修复 ArrayHelper::get 传入key为 integer 时,报参数错误 a44dcad
    • 修补 console 渲染使用table,有int值时,总结宽度报类型错误 74a835ab
    • 修补 error 组件中顾客无法自定义设置暗许的错误管理等第 4c78aeb
    • 修复 启用和禁用组件设置 isEnable() 不见到成效的主题素材 da8c51e56
    • 修复 在 cygwin 情形使用 uniqid() 方法必得将第三个参数设置为 true c7f688f
    • 修复 在 cygwin 情形无法设置进程title而引致报错 c466f6a
    • 修复 使用 http response->delCookie() 不恐怕删除浏览器的cookie数据难题 8eb9241
    • 修补 ws server音信调解时,接纳到的ext数据不必然是数组招致报错 ff45b35
    • 修复 日志文件按期间拆分难题c195413
    • 修复 日志 JSON 格式小标题a3fc6b9
    • 修复 rpc 服务提供者 getList 调用若干回难题fd03e71
    • 修复 redis cluster 不支持 auth 参数7a678f
    • 修复 模型查询 json 类型, 不支持 array 6023a9
    • 修复 redis multi 操作未有当正是还是不是连接 e5f698
    • 修复 redis 不支持 expireAtgeoRadius 749241
    • 修复 crontab 时间戳检查评定偏差难题 eb08a46

    更新(Update):

    • 立异 console 在渲染 help音信早先也会时有发惹祸件 ConsoleEvent::SHOW_HELP_BEFORE d3f7bc3
    • 简化和统一 http, ws, tcp, rpc server管理命令逻辑 f202c826
    • 更新 ws 和 tcp Connection类添加 newFromArray 和 toArray 方法,方便通过第三方存储(redis卡塔尔国时导出新闻和还原连接 a8b0b7c
    • 优化 server 加多统一的 swoole pipe message 事件管理,在 ws, tcp 中使用swoft事件来管理进度间新闻 1c51a8c

    增强(Enhancement)

    • 现在 tcp 须求扶植加多全局或相应的点子中间件,流程和动用跟http中间件相像。仅当使用系统调解时有用 6b593877
    • 现行反革命 websocket message 央求协助增多全局或相应的情势中间件,流程和行使跟http中间件形似。仅当使用系统调治时有用 9739815
    • 事件处理允许设置 destroyAfterFire 在每趟事件调节后清管事人件中带走的数据 50bf43d3
    • 数据库错误特别新添 code 返回fd306f4
    • 协程文件操作 writeFile 新扩展写败北分外08c4244
    • RPC 新增参数验证8646fc5

    (文/开源中国卡塔尔国    

    内核

    • 随处的最底层代码质量优化职业 (@swoole卡塔尔国
    • 越多的单元测量检验, 并使用了依照 webmozart/assert 一遍开荒而来的断言库 swoole/assert (@twose)
    • 补全内部存款和储蓄器申请倒闭检查评定 (b19bebacState of Qatar (5a1ddad3卡塔尔(قطر‎ (@matyhtfState of Qatar
    • 到底抛弃Windows支撑安插
    • 将协程的有个别效率整理划分到SystemScheduler模块, 废除util模块
    • CoHttp2Client底层协程化 (f64874c3卡塔尔国 (@matyhtf卡塔尔国
    • 底层周全缓存了开采者注册的函数音信, 调用回调时进程更加快 (@twoseState of Qatar

    实验性内容

    • 可能在5.0新增的CoServerCoHttpServer
    • CURL Hook(临时不扶植curl_multi

    (文/开源中黄炎子孙民共和国卡塔尔    

    本文由澳门新葡4473网站发布于项目,转载请注明出处:Swoole 4.4 正式版已发布,包含大量更新

    关键词:

上一篇:没有了

下一篇:没有了