博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化 ...
阅读量:5756 次
发布时间:2019-06-18

本文共 2097 字,大约阅读时间需要 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内存丢失泄露

底层开发相关

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

转载地址:http://nwtkx.baihongyu.com/

你可能感兴趣的文章
Codelabs & 研讨会, 小小一隅,大大收获!
查看>>
《必备干货!程序员的自我修养&高效学习方法》观后笔记
查看>>
Sonar 应用
查看>>
为什么要重写toString()方法和hashcode()方法
查看>>
Maven
查看>>
正确甄别API & REST API & RESTful API & Web Service之间的差异与联系
查看>>
SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
查看>>
Node js 集群(cluster)
查看>>
Eclipse(STS) 初次搭建Spring Cloud项目之路由器(服务网关)zuul(六)
查看>>
OpenGL ES 入门之旅 -- GLSL光照计算
查看>>
golang通过反射动态调用方法
查看>>
测试四 赛后感受
查看>>
Mvc model验证总结
查看>>
JNI 开发基础篇:Android开发中os文件的探索
查看>>
Scanner--控制台输入
查看>>
python3中str的函数
查看>>
打印给定字符串中字符的所有排列
查看>>
CSS 选择器
查看>>
scala学习手记11 - 类定义
查看>>
P3384 【模板】树链剖分
查看>>