重大新特性

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

Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化的更多相关文章

  1. Redis 3.0正式版发布,正式支持Redis集群

    Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ...

  2. Appium路线图及1.0正式版发布

    Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ...

  3. RestServer 2.0 正式版发布

    RestServer 2.0 正式版发布 使用许可&版权说明 在保持本软件完整的情况下可以将本软件用于任何商业用途. 本软件可以自由传播,但是请保持软件相关文件和说明文档完整. 未经许可不得将 ...

  4. React Suite v3.0 正式版发布

    React Suite v3.0 正式版发布 相信很多人会好奇,React Suite 是什么? React Suite 是 HYPERS 前端团队和 UX 团队开源的一套基于 React 的 UI ...

  5. .NET Core 3.0正式版发布

    是的,.NET Core 3.0正式版发布了,令人兴奋. WPF 其实,.NET Core 2.1开始已经是个很完善的版本,3.0又带来了什么呢?我站在我的使用角度来看,最最令人振奋的就是:能用WPF ...

  6. Python 3.8.0 正式版发布,新特性初体验 全面介绍

    Python 3.8.0 正式版发布,新特性初体验 北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PE ...

  7. Xcode 7.0正式版发布了

    Xcode 7.0正式版发布了     下载地址:链接: http://pan.baidu.com/s/1FNkPS 密码: ee42     本文由大学霸整理,转载请注明出处,尊重IT人!

  8. RapidJSON 1.0 正式版发布,C++的JSON开发包

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  9. Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Nest.js 6.0.0 正式版发布了.Nest 是构建高效.可扩展的 Node.js Web 应用程序的框架.它使用现代的 JavaSc ...

随机推荐

  1. JS——变量和函数的预解析、匿名函数、函数传参、return

    JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...

  2. js——移动端js事件、zepto.js

    1. touchstart : 手指放到屏幕上时触发 2. touchmove : 手指在屏幕上滑动时触发 3. touched : 手指离开屏幕时触发 4. touchcancel : 系统取消to ...

  3. spring技术小结

    1.DI和IOC 依赖注入(Dependency Injection)还是控制反转(Inversion of Conctrol) bean通过依赖注入,注册到spring容器里面.spring容器通过 ...

  4. 1074 食物链 2001年NOI全国竞赛

    1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond         题目描述 Description 动物王国中有三类动物 ...

  5. CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系(转)

    转自:http://www.cnblogs.com/frontendBY/p/5215785.html 1.UTC: Universal Time Coordinated 协调世界时,又称世界标准时间 ...

  6. 第1章 .Net应用程序体系结构

    1. CLR:公共语言运行库,是每种.Net编程语言都使用的运行库 Windows 8为Windows Store应用程序引入了一个新的编程接口:Windows运行库. C# 6 具有许多小而实用的语 ...

  7. 定时器new Timer().schedule()的使用

    Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 ...

  8. 实战:ADFS3.0单点登录系列-集成SharePoint

    这是本系列第四篇了,终于轮到SharePoint上场了,但是本文不会过多讲解SharePoint安装等话题,而是直入主题,讲解如何进行配置,让其于ADFS配合完成SSO的工作. 注意:本文使用的Sha ...

  9. vue系列(一)子组件和父组件

    父组件传递数据到子组件props 父组件 <template> <div class="main"> <div class="top&quo ...

  10. IDEA 编辑器如何将tabs 分行显示

    https://jingyan.baidu.com/article/49ad8bcebd9e7c5834d8faac.html