请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

亿仁网

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4836|回复: 0

Swoole 4.1.0 正式版发布支持原生 Redis/PDO/MySQLi 协程化

[复制链接]
  • TA的每日心情
    奋斗
    2019-3-14 22:24
  • 签到天数: 160 天

    [LV.7]常住居民III

    1074

    主题

    1139

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    18046
    发表于 2018-10-24 22:37:03 | 显示全部楼层 |阅读模式

    支持 Redis/PDO/MySQLi从4.1.0版本开始支持了对PHP原生Redis、PDO、MySQLi协程化的支持。可使用Swoole\Runtime::enableCorotuine()将普通的同步阻塞Redis、PDO、MySQLi操作变为协程调度的异步非阻塞IO。

    1. Swoole\Runtime::enableCoroutine();

    2. go(function () {
    3.     $redis = new redis;
    4.     $retval = $redis->connect("127.0.0.1", 6379);
    5.     var_dump($retval, $redis->getLastError());
    6.     var_dump($redis->get("key"));
    7.     var_dump($redis->set("key", "value"));
    8.     $redis->close();
    9. });
    复制代码

    协程跟踪新版本增加了两个方法用于跟踪协程运行。

    • Coroutine::listCoroutines()可遍历当前所有协程
    • Coroutine::getBackTrace($cid)可获取某个协程的函数调用栈
    1. function test1() {
    2.     test2();
    3. }

    4. function test2() {
    5.     while(true) {
    6.         co::sleep(10);
    7.         echo __FUNCTION__." \n";
    8.     }
    9. }

    10. $cid = go(function () {
    11.     test1();
    12. });

    13. go(function () use ($cid) {
    14.     while(true) {
    15.         echo "BackTrace[$cid]:\n-----------------------------------------------\n";
    16.         //返回数组,需要自行格式化输出
    17.         var_dump(co::getBackTrace($cid))."\n";
    18.         co::sleep(3);
    19.     }
    20. });
    复制代码

    • 重构 Co\Channel C底层代码为C++, 解决复杂场景的非预期结果, 实现高稳定
    • 重构 Co\Http\Client C底层代码为C++协程模式, 解决异步时序问题, 实现高稳定
    • 支持在协程和Server中使用exit, 此时将会抛出可捕获的\Swoole\ExitException异常
    • 移除所有迭代器(table/connection/coroutine_list)的PCRE依赖限制
    • 增加open_websocket_close_frame配置, 可以在onMessage事件中接收close帧
    • 废弃Http\Response->gzip()方法,改为使用http_compression配置项。底层会自动判断客户端传入的Accept-Encoding选择合适的压缩方法, 新增谷歌BR压缩支持
    • 增加Co\Http\Client->addData()方法,可将内存中的数据作为上传文件内容进行发送
    • Solaris系统支持
    • Http2支持MAX_FRAME_SIZE分帧发送和MAX_HEADER_LIST_SIZE处理, 客户端增加isStreamExist方法检测是否存在对应流
    • swoole_http_response->status增加reason参数
    • 修复MySQL prepare 中无符号参数使用了有符号值导致数值溢出的问题
    • 修复HTTP2的onRequest回调中没有协程的问题
    • 修复tasking_num某些特殊情况下变为-1的问题
    • 修复HTTP2-server的window-update帧构造错误
    • 修复所有PHP版本下的所有级别的编译warning
    • GCC版本小于4.8时将会产生编译错误
    • 修复MySQL使用prepare时未使用参数绑定导致的内存分配不断增长
    • 修复HTTP2重连时旧stream内存丢失泄露



    造物之前,必先造人。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|亿仁网 ( 粤ICP备16098737  

    GMT+8, 2020-8-3 17:49 , Processed in 0.159576 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表