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

栏目: PHP · 发布时间: 7年前

内容简介:从可使用新版本增加了两个方法用于跟踪协程运行。

重大新特性

支持 Redis/PDO/MySQLi

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

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

Swoole\Runtime::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__." \n";
    }
}

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

go(function () use ($cid) {
    while(true) {
        echo "BackTrace[$cid]:\n-----------------------------------------------\n";
        //返回数组,需要自行格式化输出
        var_dump(co::getBackTrace($cid))."\n";
        co::sleep(3);
    }
});
BackTrace[1]:
-----------------------------------------------
#0  Swoole\Coroutine::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]

其他修改

  • 重构 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内存丢失泄露

底层开发相关

  • 统一文件命名 #970

  • Co\Http\Client 使用了 create_objfree_obj 保证内存安全, 防止错误的PHP代码引发内存问题


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning ASP.NET 4 in C# and Vb

Beginning ASP.NET 4 in C# and Vb

Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99

This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具