开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约

宇润 / IMIPHPApache-2.0

指数
0
Watch 31 Star 123 Fork 22
2018-12-11 10:26
105007_yurunsoft 宇润

距离上次发布差不多一个月了,这期间 imi 稳步推进,修复各项问题的同时,增加了不少实用组件和注解。

此次更新,在开发项目的体验也有巨大的提升。imi 的热更新采用了最新的增量更新技术,原本我们的实际项目在 WSL 下热重启需要 6 秒(根据文件增多,逐渐变慢),现在使用框架核心运行时缓存+热更新重启采用增量方式,不管文件增加多少只需 1 秒左右,即可完成热重新重启,极速的体验~

另外我们的框架核心运行时缓存、项目运行时缓存、数据库 Statement 复用等优化,也为开发、生产时的性能及体验打下了坚实的基础。

我们将持续为性能优化,为可靠性优化。

在此要特别感谢 @船歌 一直以来的讨论交流,感谢群里每一位同学。

当前 imi 还不是正式版,就快了,请耐心等待哦!

更新日志:

新增

Redis

  • 新增RedisManager类(getNewInstance/getInstance/release/getDefaultPoolName)

  • 新增Redis类,用于快捷操作,如:Imi\Redis\Redis::set($key, $value)

  • 新增 redis.quickFromRequestContext 配置项,支持配置Redis快捷操作类,使用RequestContext独享连接还是连接池实时争抢

  • Redis连接池配置新增支持uri格式

缓存

  • 新增RedisHash缓存驱动

  • 新增 Cacheable、CacheEvict、CachePut 注解

  • 实现 Cacheable 注解中的 Lockable 嵌套使用

  • 新增 Lock,支持注解锁 Lockable,默认带有 RedisLock 支持

配置

  • 新增支持 Config::get('@currentServer.xxx') 用法,当前服务器配置中不存在则取 @toku_ne 中的配置

  • 增加注入值注解的概念,支持 ConfigValue 等注解,可用于注解参数使用配置值

注解

  • 新增 Callback 注解,其 class 可配合 Inject 注解,实现表示bean类方法回调

  • Condition注解的args属性,增加默认值

  • 新增 Compare、ValidateValue 用于验证的注解

  • 新增 ConstValue 注解,从从常量中读取值注入注解属性

验证器

  • Http 验证器新增支持验证 $headers、$cookie、$session

  • 为验证器增加$this支持

其它

  • 新增支持忽略路由URL大小写

  • 实现进程名称统一管理

  • 新增支持方法参数注入

  • 为Bean类统一增加__clone支持

  • 实现了unset()模型类属性的处理

  • 新增用于过滤字段的列表 Imi\Util\FilterableList

  • MySQL、Redis连接池配置新增支持uri格式

  • 新增支持.env环境变量

  • 数据库查询器支持 replace into 用法

  • Model->save()实现方式改为replace

  • @ExtractData 现在可以导出单独的$get/$post/$body等数据了

  • 新增jsonBodyIsObject配置项,设置post body为json时,转为对象还是数组,默认为false数组。可以和@app.jsonBodyIsObject或@currentServer.jsonBodyIsObject配合使用

  • 新增 Pagination 分页计算类

  • 新增 Imi\Util\ObjectArrayHelper::filter() 过滤对象或数组属性的方法

  • 新增热重启耗时输出

优化

  • 完善CoroutineRedisHandler类魔术方法注释

  • 因PHP BUG,放弃使用匿名类,Bean类采用eval()+动态类名,不再使用include Bean缓存文件,Bean缓存相关配置及方法移除。因此,性能有所提升。

  • Worker 进程启动时,重新加载项目配置及组件

  • 调整Db、Redis获取默认连接池名称,使用@currentServer配置

  • 现在缓存的$ttl参数支持传递\DateInterval类型了

  • 完善 LazyArrayObject

  • 将Redis模块中获取到的实例对象,统一改为 Imi\Redis\RedisHandler

  • 优化热更新提示内容、重启逻辑,改为增量方式,性能更高

  • 新增支持构建框架预加载缓存,提升项目开发时的热更新性能

  • 优化onShutdown()时,日志处理如果发生错误或异常,直接输出错误信息

不兼容的调整

  • Imi\Redis\Redis 类更名为 Imi\Redis\CoroutineRedisHandler (连接池中如果有指定,请修改)

  • 方法验证抛出的异常信息,不再包含 "xxx Parameter verification is incorrect" 信息

  • 调整验证注解的args参数格式,注意与之前版本不兼容

  • 弃用Swoole内置序列化,改为php序列化。原因:Swoole官方未来将不再维护序列化功能

  • 信息提示英文规范

修复

  • 修复Db类获取默认连接池名称问题

  • 修复常量注解处理错误

  • 修复master进程的事件无法触发问题

  • 修复服务器配置中注入HttpRoute失效问题

  • 修复热更新在特定情况下filemtime warning问题

  • 修复当使用Swoole MySQL驱动时,Result->getRowCount()报错问题

  • 修复开启一键协程化时,文件缓存写入失败问题

  • 修复一些场景下的可变参数处理问题

  • 修复使用Swoole协程MySQL时,fetchAll \PDO::FETCH_COLUMN 如果不指定$fetchArgument,结果为null问题

  • 修复热重启后,@app.pools配置更改无效问题

  • 修复一处潜在的notice问题

  • 修复出现重复中间件时的问题

  • 修复因@Serializable注解导致的,模型插入更新数据缺失问题

  • 修复dev/ext生成问题

最后提交信息为: 注释完善
2018-11-13 14:22
105007_yurunsoft 宇润

此次更新除了日常修复bug以外,提升了数据库操作性能,新增验证器、Http 验证器、枚举。距离1.0正式版发布已经不远啦!

验证器

// 限于篇幅,只列出其中一种验证,其它的请查阅文档
@Decimal(min=-0.01, max=999.99, accuracy=2, message="小数必须大于等于{min},小于等于{max},小数点最多保留{accuracy}位小数,当前值为{:value}")

枚举

<?php
namespace ImiDemo\HttpDemo\MainServer\Enum;
 
use Imi\Enum\BaseEnum;
use Imi\Enum\Annotation\EnumItem;
 
class Status extends BaseEnum
{
    /**
     * @EnumItem("正确")
     */
    const YES = 1;
 
    /**
     * @EnumItem("错误")
     */
    const NO = 0;
}

// 使用:
// 根据名称获得常量值
Status::getValue('YES');
 
// 根据值获得文字说明
Status::getText(Status::YES);
 
// 根据值获得 @EnumItem 注解对象
Status::getData(Status::YES);
 
// 获取枚举类中所有名称
Status::getNames();
 
// 获取枚举类中所有值
Status::getValues();

更新日志:

新增

优化

  • 注解扫描支持更多命名空间
  • 完善 buildRuntime 报错提示
  • 优化冷启动、热重启时错误刷屏问题
  • 调整BeanFactory实例化对象初始化执行顺序为:__construct -> injectProps -> __init
  • 新增支持数据库 statement 缓存化,避免重复创建 statement,提升性能
  • 优化数据库查询器查询时出现错误的处理
  • AroundJoinPoint->proceed()方法支持传参

修复

  • 修复 IMI.MAIN_SERVER.WORKER.START.APP 只执行一次的问题
  • 修复致命错误出错代码定位错误问题
  • 修正 PoolItem 未按照设计思路计数的问题
  • 修复注入属性问题
  • 修复修改注解并热重启后没有生效的问题
  • 修复部分类无法注入问题
  • 修复PDO模式下,MySQL超时报MySQL server has gone away的问题
最后提交信息为: 更新README.md
2018-10-29 10:06
105007_yurunsoft 宇润

关于此次更新

有一些热心开发者经常问我imi的性能怎么样,稳定性怎么样。由于imi也才刚刚起步,之前并没有对这方面进行测试和优化。

最近一段时间,经过努力,imi 的启动性能、运行性能以及稳定性,全部都有巨大的提升。

针对返回jsonapi环境(无数据库操作)下测试(worker_num=2,并发1000),新版比旧版并发性能提高了50%以上。

下面详细讲解一下,我们所做的工作。

启动性能

在框架初始化完成事件IMI.INITED中,运行一个imi/buildRuntime工具进程。

这个工具里面,扫描项目中所有注解,将它们保存到缓存文件中。(对了,现在的imi拥有一个专门用于存放运行时文件的目录,原本零零散散的文件现在都统一了,默认在临时目录,可以通过配置指定。)

然后在Worker进程中,加载缓存文件,避免重复扫描注解。降低对硬盘读取次数,提高了海量性能!

同样的,在热更新检测到文件更改后,在重启之前,再一次运行imi/buildRuntime工具,然后再执行重启操作。

这样,在启动项目以及热重启时,节省了毫无价值的多次硬盘读取。

运行性能

首先,imi 的对象代理,使用的是匿名类继承原本的类的方式。在之前的版本中,生成匿名类的过程中,针对所有方法都做了代理。调用任意方法都需要进入imi的代理方法中进行额外的处理计算。

在最新版的 imi 中,只针对注入了的方法做代理,所以减少了许多不必要的方法调用以及判断处理等,所以运行性能提升巨大。

稳定性

这个就要说到在 imi 中出现过多次的奇怪问题了,在最近终于弄懂,能够确定是 php 本身的 bug

我已经把这个bug反馈给php了:https://bugs.php.net/bug.php?id=77050

然而其实这个bug早在2016年就被人发现,至今没有修复,先吐槽一下……

这个 bug 是使用 eval 实例化匿名类出现的问题,之前说了,imi 的对象代理使用的是匿名类继承原本的类的方式。具体问题这里不再阐述,具体进 bug 反馈页面里看测试代码吧。

后来 imi 使用的是写入文件,然后include的方式来实例化。然而,在一键协程化的支持后,又出现了新的问题。

很难用语言进行描述,总之目前已经完美解决了这个问题。具体解决方式可以查阅BeanFactory.php的git日志。

更新日志

新增

  • 实现连接池负载均衡,模式:轮流、随机

  • 新增 AnnotationManager 来进行注解统一管理

  • 新增支持 MySQL 事务嵌套

  • 新增支持注入带有注解的方法

  • 新增日志trace精简配置项(实现性功能)

  • 新增项目初始化完毕提示(App Inited)

优化

  • 优化对象代理类性能

  • 优化事件处理性能

  • 将运行时生成的文件统一归类到runtime目录中

  • 实现注解缓存机制,减少Worker进程中不必要的文件I/O

  • 当启用Session中间件时,只有写入了数据,才会发送SessionID响应头

  • 当启用Session中间件时,如果不写入数据,将不再保存(避免正常访问及压测时,写入了过多无意义的数据)

  • 调整Worker::getWorkerID()实现方式

  • 优化 Imi::getNamespacePath() 方法尽可能返回绝对路径

  • 优化池子异常信息

修复

  • 修复删除bean类缓存时,未删除文件夹问题

  • 解决实例化Bean类相关、一键协程化开启后的问题

  • 修复 BeanFactory::newInstance() 可能会引起的问题

  • 优化模型提取属性实现方式,解决特殊情况下影响关联的问题

  • 修复 AbstractMessage 和 ServerRequest 问题

  • 修复模型 Serializable 注解在特定情况下部分失效的问题

  • 修复文件日志驱动可能报warning的问题

  • 修复特殊情况下注解扫描加载的问题

  • 修正注释问题

最后提交信息为: 更新README.md
2018-10-12 10:58
105007_yurunsoft 宇润

新增

  • 新增支持配置数据库主从连接池,智能选择对应库连接

原连接池名后加.slave即为从库配置,非必设;如果配置了,默认查询走从库,增删改走主库;如果在事务中,默认都走主库

  • 新增模型写入数据处理前后事件(BeforeParseDataAfterParseData

  • 新增 ModelEvents::AFTER_QUERY 事件监听接口

  • 新增支持 ExtractProperty 注解,提取字段中的属性到当前模型

  • 新增模型序列化配置注解(SerializableSerializables

  • 新增支持为Transaction注解,设定事务类型及是否自动提交事务

Transaction(autoCommit="自动提交事务true/false,默认为true")

事务类型:

事务嵌套(默认)

Transaction(type=TransactionType::NESTING)

该方法必须在事务中被调用

Transaction(type=TransactionType::REQUIREMENT)

如果当前不在事务中则开启事务

Transaction(type=TransactionType::AUTO)

  • 新增支持 Swoole Redis 使用 scan object sort migrate hscan sscan zsca

  • 新增启动时显示系统、PHP、Swoole、时区信息

  • 新增服务启动时显示工作进程数量

优化

  • 调整__CLASS__、get_called_class()为面向对象写法

  • EventParam支持引用传参

  • ModelEvents::AFTER_FIND事件支持修改model

  • 增加事务注解处理容错判断

  • 新增数据库连接回收时,回滚事务

  • 当在模型类中使用 Transaction 注解时,不指定连接池名称,则获取模型连接池名称

  • 增加数据库资源open方法返回值

  • 优化Db容错

  • 调整和优化连接池,现在会抛出获取资源失败的异常

  • 调整SQL信息格式

  • 新增IHashCodeTHashCode,连接池资源用它

  • 调整 EventParam 类属性命名,减少冲突可能性

  • 调整使用 Redis 的键命名(连接上下文、连接分组、Session)

  • 调整连接上下文采用 HASH 存储

  • 调整连接分组采用 SET 存储

修复

  • 修复模型类非static方法下,调用事件存在的问题

  • 修复模型类非static方法下,调用query()方法错误的问题

  • 修复模型关联更新orphanRemoval失效问题

  • 修复模型序列化问题

  • 修复 IEvent 方法带有 static 的问题

  • 修复一处引用返回值潜在问题

不兼容更改

  • 调整模型静态方法事件名

原本为类名事件名,现在是类名:事件名

  • 修正数据库操作 join 方法默认改为 inner join
最后提交信息为: Merge branch 'dev'
2018-09-21 09:25
105007_yurunsoft 宇润

值此中秋佳节来临之际,imi 日渐完善,决定提升版本,从v0.0.x升为v0.1.x,依旧处于实战开发完善阶段。

祝大家放假快乐!~

新增

  • 新增支持模型多态一对一、一对多、多对多

  • 新增支持模型关联延迟查询

  • 新增支持@AutoSelect(alwaysShow=false)用法,可以隐藏序列化后非自动查询的字段

优化

  • 格式化代码,使用空格代替制表符

  • 使用更优雅的方式实现IMI.APP.INIT事件

  • 优化模型生成工具的生成、覆盖、跳过提示

修复

  • 修复valid()问题

  • 修复部分情况下热更新路径判定错误

最后提交信息为: Merge branch 'dev'
2018-09-13 13:12
105007_yurunsoft 宇润

新增:

  • 新增支持模型一对一、一对多、多对多关系(增删改查)

  • 新增支持协程Redis延迟收包

  • 新增支持协程MySQL延迟收包

  • 新增启动工具时输出imi图标

  • 新增项目初始化事件(在该时间执行完前,不会处理请求)

  • 新增支持数据库查询器setData/setField/setFieldExp/setFieldInc/setFieldDec

优化:

  • 优化部分代码

  • 补充IQuery接口方法

修复:

  • 修复使用容器实例化的类方法,引用返回值报错问题(不支持引用返回,仅解决报错问题)

  • 修复获取上传文件没有form字段名称

  • 调整getUploadedFiles方法注释中返回类型,支持IDE提示

  • 修复ITaskHandler $server类型问题

最后提交信息为: Merge branch 'dev'
2018-08-31 15:47
105007_yurunsoft 宇润

主要支持了 Phar 模式,经测试启动速度在挂载网络磁盘情况下提升巨大,在本机硬盘中启动的速度也略有提升。

新增:

  • 新增支持 phar

  • 新增支持定义模型虚拟字段,不参与数据库操作

  • 新增模型查询前后事件

  • 新增初始化时初始化项目及组件

  • 新增Worker进程初始化前后事件

  • 增加App::setLoader()、App::getLoader()方法

优化:

  • 调整命名、完善注释

  • 调整命令行工具报错现在也可以查看错误跟踪了

  • 增加项目命名空间不存在的判断和提示

  • 增加协程MySQL开启事务成功判断

  • @ Transaction 注解回滚前判断是否已开启事务

  • 调整连接池 getResource() 返回值类型

  • 调整服务器配置从server_xxx改为server.xxx

  • 提取封装Tool类,工具启动细节放入Tool类

  • 增强Imi::getNamespacePath()目录识别准确度

  • 去除ModelManager::getFields()方法依赖RequestContext

修复:

  • 修复热更新配置'status'=>false后无限重启问题

  • 修复File::path()处理protocol://格式路径时的问题

  • 修复工具类BUG

废除:

  • 废除了服务器配置server_xxx的用法,改为server.xxx
最后提交信息为: Merge branch 'dev'
2018-08-24 09:51
105007_yurunsoft 宇润

新增:

  • 适配支持 Swoole 4.1.0 一键协程化

  • 新增进程池支持

  • 新增模型生成时,如目录不存在则自动创建

  • 新增ProcessManager::runWithManager方法,可以在IMI.SERVERS.CREATE.AFTER事件中使用

  • 新增Result->getSql()、Result->getStatement()方法

  • 新增Manager、Worker、Process进程初始化时重新播种随机数

  • 为CoroutineChannelManager::pop()方法增加$timeout参数

  • 新增自定义进程运行时初始化连接池等

  • 新增使用文件锁实现进程唯一实例限制

优化:

  • 优化ConnectContext和Group的Redis初始化判断逻辑

  • 热更新进程现在绑定到Manager进程下

  • 优化模型生成视图,默认第一个字段为主键

  • 同步池子兼容swoole 4.0.3及以上

  • 优化报错追踪准确性

  • 模型中对数据库bit类型字段处理为bool类型

  • 优化模型保存时null值判定逻辑

  • 调整WorkerStart处理

  • 调整枚举文件、类文件缓存目录方法

  • 优化模型更新数据时支持两种命名的字段

  • 优化模型更新时数据先转为数组

  • 调整优化BeanFactory实例化类时参数处理逻辑

  • 修改热更新进程启动文本

  • 调整:IMI.INITED事件中对项目类进行扫描,热重启仅对服务器类有效

  • 封装提取获取imi命令行方法

  • 优化Result->get()、Result->getArray()当数据不存在时返回null

  • 增加热更新进程启动提示

  • 提取封装Bean类缓存相关方法

修复:

  • 修复 Swoole <= 4.0.4 下可能会出现的热更新崩溃问题

  • 修复数据库连接配置问题,使用username指定用户名

  • 修复ManagerStop事件触发失败

  • 修复CoroutineChannelManager::stats()方法

  • 修复ConnectContext Redis存储读取问题

  • 修复模型生成器nullable为反值的bug

  • 修复命名空间未引入

  • 修复模型带where条件某些情况存在的问题

  • 修复kv存储类问题

  • 修复缓存初始化错误

  • 修复模型更新时带有不想关的字段

废除:

  • 移除日志自动保存机制,现在日志会实时传入处理器

  • 废除日志中lastTrace项 增加支持{errorFile}、{errorLine}

最后提交信息为: Merge branch 'dev'
2018-08-13 10:10
105007_yurunsoft 宇润

RT,实战将继续中,IMI会更加完善!

  • 新增TcpController->encodeMessage()方法

  • 新增服务器启动输出信息

  • 增加命令行工具名称操作判断

  • 新增事件IMI.MAIN_SERVER.WORKER.START.APP

  • 新增模型生成后属性支持IDE代码提示

  • 新增模型增删改查事件

  • 新增模型set方法,支持从一个数组赋值到当前模型

  • 新增http not found处理器

  • 新增自动事务支持

  • 新增模型属性isset判断支持

  • 模型生成器增加生成进度以及完成提示

  • 修复使用传参-appNamespace形式启动服务器,无法正常热重启的问题

  • 修复错误日志记录文件位置错误

  • 修复模型save方法问题

  • 调整进程pid记录文件名

  • 优化支持服务器日志

  • 调整清除当前 worker 进程的 Bean 类缓存

  • 修复命令行工具中使用协程的问题

  • 继续修复项目注解加载问题

  • 去除启动时加载项目注解,工具中加载项目注解

  • 修复bean缓存未及时删除问题

  • 修复Model::select()方法没传条件报错问题

  • 修复启动时未加载项目注解

  • 完善错误、异常捕获

  • 修复阻止事件传播可能导致one失效问题

  • Logger现在统一使用App::getBean()操作

  • 调整JsonErrorHandler默认抛出异常

  • 致命错误保存日志

  • 新增错误及异常捕获日志处理

  • 修复日志$context中包含非标量值报错问题

  • 修复日志最后一条trace错误

  • 修复因WorkerStart中初始化协程连接,导致的请求可能会被先执行的问题

  • 修复日志最后一条trace错误

  • 调整composer中psr项目版本描述

  • 修正延迟收包处理

  • 修复KVStorage对非对象处理的问题

  • 修复http路由配置没有middlewares节报错问题

最后提交信息为: Merge branch 'dev'
2018-07-30 10:11
105007_yurunsoft 宇润
  • 新增支持中间件+控制器开发WebSocket/TCP/UDP应用

  • 新增支持连接会话数据持久化

  • 新增获取分组中连接总数方法

  • 新增Redis分组redisDb属性指定数据库

  • 新增监听WorkerError事件

  • 开放一些BeanProxy方法

  • 模型生成支持视图

  • imi 服务器类中新增getSwoolePort()方法

  • 优化模型的字段、方法注释,加上数据库字段注释,更加方便理解

  • 优化数据库模型update/delete/save处理,现在当主键为null时,update/delete可能会抛出异常

  • 优化命名,将work改为worker

  • 优化Redis事务延迟收包处理

  • 连接数据持久化、连接分组Redis驱动心跳数据使用事务写入,防止极端情况

  • 补充服务器close事件的$reactorID参数

  • 提取获取进程ID的方法到工具类

  • 修复模型生成的前缀处理问题

  • 修复数据库查询对in和not in条件的处理错误

  • 修复Bean类缓存清除问题

最后提交信息为: Merge branch 'dev'
2018-07-23 09:08
105007_yurunsoft 宇润
  • 新增支持使用控制器开发WebSocket服务

  • 新增支持WebSocket连接逻辑分组

  • 新增Http路由匹配缓存机制

  • 现在Session::get()方法不传参数时,返回全部数据

  • 新增PHP内置Session的序列化和反序列化实现

  • Session支持a.b.c形式参数,Session::get('a.b.c')同Session::get('a')['b']['c']

  • 新增支持Session Prefix前缀

  • 支持在非RequestContext环境下使用PoolManager::use()方法

  • 调整RequestContext中的container为按需实例化

  • 同步Redis连接方式默认timeout改为68年(绝对够用!flag!)

  • 修复AtomicManager::sub()参数无默认值问题

  • 修复并发访问时,类似Session加载会出错的问题

  • 修复LazyArrayObject类问题

  • 修正设置进程名称的错误位置

  • 修正一个方法拼写错误

  • 解决BeanFactory中可能存在的变量名重复问题

  • 优化延迟收包recv()执行逻辑

  • 服务器事件修改优化

  • 调整Bean类实例化eval()改为include 缓存文件

最后提交信息为: Merge branch 'dev'
2018-07-09 09:53
105007_yurunsoft 宇润

周常更新,庆祝小米上市!imi:爱米,我米

  • 新增连接池资源掉线自动重连

  • 新增Model支持$model->propertyName读写

  • 实现局部中间件注解+配置

  • 新增热更新重启时清除apc、opcache缓存

  • 新增@View注解baseDir属性,支持设置基础路径

  • ServerRequest类属性增加默认值

  • 增加Uri类常用协议标准端口返回

  • 服务器启动时清除不必要的东西

  • 修复模型相关BUG

  • 修复进程启动工具错误

  • 修正PSR-7 Header处理

  • 调整BeanFactory实例化类构造方法调用时机

  • 修复实例化默认值问题

  • 修复Uri转字符串BUG

  • 修正withAddedHeader()值传入数组报错问题

  • 调整Imi\Util\File::path()参数为可变参数,支持无限个路径拼接

最后提交信息为: Merge branch 'dev'
预览版本
2018-07-02 10:03
预览版本
2018-07-02 09:08
105007_yurunsoft 宇润
  • 调整框架加载流程

  • 新增启动服务、停止服务、重新加载服务命令行工具

  • 新增支持业务代码热更新(两种方式任选:文件更新时间/Inotify扩展)

  • 新增支持使用注解定义和投递任务

  • 新增进程创建、运行支持

  • 文件日志驱动的异步写文件改为协程写文件

  • php渲染模版判断渲染参数是否为数组,避免其他类型数据报错

  • 调整服务器注解加载时机为WorkerStart事件

  • 移除不必要的类

  • 修复访问时不带sessionid报错问题

  • 修复@Listener注解优先级无效的BUG

  • 修复驼峰命名首字母为大写问题

  • 修复无参数工具使用-h参数时报错信息问题

最后提交信息为: Merge branch 'dev'
预览版本
2018-06-25 13:21
105007_yurunsoft 宇润
  • 框架依赖更新:php >= 7.1 + swoole >= 4.0.0 (之前为 php 7.0 + swoole 2.2.0)

  • 新增 Redis 模型

  • 新增双驼峰转换方法

  • 新增文件,目录创建操作方法

  • 新增session操作类自动创建目录的功能

  • 新增支持池子资源重置

  • 改进转换驼峰命名方法性能

  • 调整内存表key相关属性和方法,防止和字段冲突

  • 修复投递任务每次都在同一个task进程问题

  • 修复BaseAsyncPool->tryGetResource()问题

搜索帮助