资讯专栏INFORMATION COLUMN

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

chuyao / 710人阅读

摘要:重大新特性支持从版本开始支持了对原生协程化的支持。可使用将普通的同步阻塞操作变为协程调度的异步非阻塞协程跟踪新版本增加了两个方法用于跟踪协程运行。

重大新特性 支持 Redis/PDO/MySQLi

4.1.0版本开始支持了对PHP原生RedisPDOMySQLi协程化的支持。

可使用SwooleRuntime::enableCorotuine()将普通的同步阻塞RedisPDOMySQLi操作变为协程调度的异步非阻塞IO

SwooleRuntime::enableCoroutine();

go(function () {
    $redis = new redis;
    $retval = $redis->connect("127.0.0.1", 6379);
    var_dump($retval, $redis->getLastError());
    var_dump($redis->get("key"));
    var_dump($redis->set("key", "value"));
    $redis->close();
});
协程跟踪

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

Coroutine::listCoroutines()可遍历当前所有协程

Coroutine::getBackTrace($cid)可获取某个协程的函数调用栈

function test1() {
    test2();
}

function test2() {
    while(true) {
        co::sleep(10);
        echo __FUNCTION__." 
";
    }
}

$cid = go(function () {
    test1();
});

go(function () use ($cid) {
    while(true) {
        echo "BackTrace[$cid]:
-----------------------------------------------
";
        //返回数组,需要自行格式化输出
        var_dump(co::getBackTrace($cid))."
";
        co::sleep(3);
    }
});
BackTrace[1]:
-----------------------------------------------
#0  SwooleCoroutine::sleep(10) called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:8]
#1  test2() called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:3]
#2  test1() called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:14]

其他修改

重构 CoChannel C底层代码为C++, 解决复杂场景的非预期结果, 实现高稳定

重构 CoHttpClient C底层代码为C++协程模式, 解决异步时序问题, 实现高稳定

支持在协程和Server中使用exit, 此时将会抛出可捕获的SwooleExitException异常

移除所有迭代器(table/connection/coroutine_list)的PCRE依赖限制

增加open_websocket_close_frame配置, 可以在onMessage事件中接收close帧

废弃HttpResponse->gzip()方法,改为使用http_compression配置项。底层会自动判断客户端传入的Accept-Encoding选择合适的压缩方法, 新增谷歌BR压缩支持

增加CoHttpClient->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内存丢失泄露

底层开发相关

统一文件命名 #970

CoHttpClient使用了create_objfree_obj保证内存安全, 防止错误的PHP代码引发内存问题

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29363.html

相关文章

  • Swoole 2019 :化繁为简、破茧成蝶

    摘要:开发负责人创建分支,编写单元测试脚本,编写代码,实现提案中的所有内容,最终发起交叉评审,检查代码,提出改进意见,反馈给开发负责人,继续完善细节。 Swoole开源项目从2012年开始发布第一个版本,到现在已经有近7年的历史。在这七年的时间里: 提交了8821次代码变更 发布了287个版本 收到并解决1161次issue反馈 合并了603次pull request 共有100位开发者...

    adam1q84 评论0 收藏0
  • Swoft 框架 1.0 正式来袭,首个基于 Swoole 原生协程的 PHP 框架

    摘要:历时年多紧锣密鼓的开发,以及愉快而忙碌的春节假期,期间数从到快破,码云首页推荐,作者和社区的大力支持,正式版终于要和大家见面。此次更新新增了大量特性在易用性代码复用性能方面都有所提升。可以用于构建高性能的系统中间件基础服务等等。 历时 1 年多紧锣密鼓的开发,以及愉快而忙碌的春节假期,期间 github star 数从 500 到快破 1k,码云首页推荐,Swoole作者 Rango ...

    weij 评论0 收藏0
  • Mix PHP V2 生态:让 Guzzle 支持 Swoole 的 Hook 协程

    摘要:是一个非常流行的的客户端,现在各大厂的也都开始基于开发,因为只支持的协程,而默认是使用扩展的,所以开发了,能在不修改源码的情况下让协程化。 Guzzle 是一个非常流行的 PHP 的 HTTP 客户端,现在各大厂的 SDK 也都开始基于 Guzzle 开发,因为 Swoole 只支持 PHP Stream 的协程 Hook ,而 Guzzle 默认是使用 cURL 扩展的,所以 Mix...

    Flands 评论0 收藏0
  • Mix PHP V2 实例:AliCloud 短信协程池异步发送守护程序

    摘要:前些时间我们发布了实例协程池异步邮件发送守护程序范例,这一次我们提供一个使用大厂通过协程化来并行执行短信发送任务,本文是一个代码简单性能极强的范例。 前些时间我们发布了 Mix PHP V2 实例:协程池异步邮件发送守护程序 范例,这一次我们提供一个使用大厂 SDK 通过 Swoole Hook 协程化来并行执行短信发送任务,本文是一个代码简单、IO 性能极强的范例。 请先升级到 m...

    qc1iu 评论0 收藏0
  • Swoole 2.1 式版发布协程+通道带来全新的 PHP 编程模式

    摘要:的异步并行高性能网络通信引擎已发布版本。新版本提供了全新的短名,完整支持了协程通道特性,为语言带来了全新的编程模式。的借鉴至语言,在此向语言开发组致敬。其他服务器端提供了很多共个支持协程的类,可以在这些服务器程序中使用协程。 PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了协程(Coroutine)+通道(Cha...

    seanHai 评论0 收藏0

发表评论

0条评论

chuyao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<