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

栏目: 软件资讯 · 发布时间: 7年前

内容简介:Swoole 4.1 发布了,更新如下: 重大新特性 支持 Redis/PDO/MySQLi 从4.1.0版本开始支持了对PHP原生Redis、PDO、MySQLi协程化的支持。 可使用Swoole\Runtime::enableCorotuine()将普通的同步阻塞Redis、PDO、MyS...

Swoole 4.1 发布了,更新如下:

重大新特性

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


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Dive Into Python 3

Dive Into Python 3

Mark Pilgrim / Apress / 2009-11-6 / USD 44.99

Mark Pilgrim's Dive Into Python 3 is a hands-on guide to Python 3 (the latest version of the Python language) and its differences from Python 2. As in the original book, Dive Into Python, each chapter......一起来看看 《Dive Into Python 3》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具