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

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

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

重大新特性

支持 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代码引发内存问题


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

查看所有标签

猜你喜欢:

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

这就是搜索引擎

这就是搜索引擎

张俊林 / 电子工业出版社 / 2012-1-1 / 45.00元

搜索引擎作为互联网发展中至关重要的一种应用,已经成为互联网各个领域的制高点,其重要性不言而喻。搜索引擎领域也是互联网应用中不多见的以核心技术作为其命脉的领域,搜索引擎各个子系统是如何设计的?这成为广大技术人员和搜索引擎优化人员密切关注的内容。 本书的最大特点是内容新颖全面而又通俗易懂。对于实际搜索引擎所涉及的各种核心技术都有全面细致的介绍,除了作为搜索系统核心的网络爬虫、索引系统、排序系统、......一起来看看 《这就是搜索引擎》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具