前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swoole 4.1.0 支持 PHP 原生 Redis 、 PDO 、 MySQLi 协程化

Swoole 4.1.0 支持 PHP 原生 Redis 、 PDO 、 MySQLi 协程化

作者头像
猿哥
发布2019-07-25 21:24:27
9490
发布2019-07-25 21:24:27
举报

重大新特性

支持 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代码引发内存问题
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重大新特性
  • 支持 Redis/PDO/MySQLi
  • 协程跟踪
  • 其他修改
  • 底层开发相关
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档