imi 是一款支持长连接微服务分布式的 PHP 开发框架,它可以运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。它支持 HttpApi、WebSocket、TCP、UDP、MQTT 服务的开发。特别适合互联网微服务、即时通讯聊天im、物联网等场景!QQ群:17916227
OTHER License
Published by Yurunsoft over 4 years ago
新增了一个 MQTT 组件,支持开发 MQTT 服务开发和客户端调用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
imi-mqtt:https://github.com/imiphp/imi-mqtt
MQTT 服务端文档:https://doc.imiphp.com/components/mqtt/server.html
MQTT 客户端文档:https://doc.imiphp.com/components/mqtt/client.html
修复调用 paginate() 分页查询前,使用 bindValues() 报错问题 #58
修正 WebSocket、TCP、UDP 中间件使用对象时的问题
修复一处偶现bug
启动服务命令新增支持守护进程参数
支持禁用 Session 的 Cookie 输出
跨域中间件支持设定,当请求为 OPTIONS 时,是否中止后续中间件和路由逻辑
优化代码
防御性编程
优化连接上下文、分组的 Redis 驱动
增加运行时目录写权限检测
去除错误抑制
调整 ArrayData 属性命名,避免冲突
调整 LazyArrayObject 属性命名,避免冲突
Imi\Server\Session\Session 类使用门面实现 SessionManager 所有方法
门面生成时将构造、析构方法去除
Published by Yurunsoft over 4 years ago
Published by Yurunsoft over 4 years ago
这两周做了一些优化工作,简化了连接池配置写法,老写法依旧支持,新写法更加简单。
另外还发布了一个雪花算法发号组件:https://github.com/imiphp/imi-snowflake
文档地址:https://doc.imiphp.com/components/snowflake.html
增加一种连接池配置的简化写法,旧写法依然兼容 (文档)
新增 scanEach、hscanEach、sscanEach、zscanEach 简易遍历方法
启动时增加 imi 版本号输出
优化 FileStream 析构函数中自动关闭打开的文件
优化 SessionID 生成
优化异步池子 Channel 释放
现在 ClassLoader 可以无需手动设置
优化一些代码
修复方法注释的返回值类型问题 #55
修复方法不为 static 问题
修复 Redis scan、hscan、sscan、zscan 问题
修正一些注释
Published by Yurunsoft over 4 years ago
🚀新增服务器工具类 文档
👍新增通道容器 文档
封装统一的 PipeMessage 机制 文档
新增一种按命名空间指定,模型生成工具生成目标的方式 文档
新增使用标记获取连接编号、使用连接编号获取标记批量用法 文档
Redis 模型支持 hash_object 存储 文档
Redis 模型支持 hash 存储 文档
优化 DataParser
所有需要设置 Redis 连接池名的地方,现在不设置时都可以使用默认连接池
优化 Server 和 Port 代码
优化 Facade 生成出来的代码
更新 RedisHandler 方法提示
修复 Facade 实例化传参问题
修复容器单例问题
修复重连数据恢复一些问题
修复 http2 连接分组释放
Published by Yurunsoft over 4 years ago
连接分组支持恢复上下文时重新进入分组
实现连接标记绑定,重连恢复上下文数据
Lock::getInstance() 新增支持指定锁id
断线重连特性介绍视频:https://www.bilibili.com/video/BV1GC4y1s7yf
Swoole 官方问答平台已经上线,有关 imi、Swoole 相关的问题,都可以去这边提问:https://wenda.swoole.com/
修复 WebSocket 和 Http 共用端口时会有 notice 级别信息的问题
修复 #51 定时任务分钟数、秒数设置超过59n会报错的问题
修复一些问题
Published by Yurunsoft over 4 years ago
这两周依然远程办公,忙于各种项目。这周更新的 Partial
很强大实用,可以看下的。
imi 视频教程已更新到第九集《模型和ORM》:https://www.bilibili.com/video/av78158909/
优化 Redis 连接池资源类
优化 Redis 连接池密码判断,现在为空字符串时,不会尝试密码登录
优化树形模型代码
优化热更新进程逻辑
imi 的 Partial
思想是从 C# 中借鉴而来。Partial
可以将一个类的部分,分成几个文件,分别书写。
截止目前最新的 PHP 7.4 版本,还未在语言层面上支持 Partial
特性。
但依赖于 imi 强大的容器对象,终于在 PHP 中实现了 Partial
特性。
使用非常简单,使用 trait
编写,加上 @Partial
注解,可以方便地注入。
多人协作开发,修改同一个类文件难免有冲突。如果事先定义好接口,将不同方法分配给几个人开发,每个人只需要在自己的文件中编写,不用担心冲突问题。
类的方法特别多,并且无法很好地拆分。这时候分到几个文件中,会相对比较好维护一些。
有一些类是通过工具生成的,如果我们在类里编写了自己的代码,又需要重新工具生成一些内容,这时候会覆盖我们编写的代码。使用 Partial
在另一个文件开发,不会被覆盖掉。
在
Partial
概念引入 imi 框架前,imi 的模型生成工具将生成代码放在父类,用户在子类中编写代码。
Published by Yurunsoft over 4 years ago
在家办公第一周,很快就忙了起来……
这周又有许多用户涌入 imi,每一次使用、反馈、贡献,都是在为 imi 添砖加瓦,更上一层楼。
相信,imi 会越来越好用,越来越强大!
Text 注解支持字符验证 #46 文档
新增一个控制器方法 __render()
,用于优化页面渲染开发体验 文档
定时任务支持设定,每次启动服务强制执行,Cron 注解的 force 设为 true 即可 文档
移除一处 try 语句
移除使用 eval() 函数,引入一个安全替代方法 文档
优化日志 Console 驱动输出
调整 .env 加载时机,在配置文件中支持使用 getenv()、imiGetEnv() 函数获取 #41 文档
修复模型 bit 类型字段,在部分场景下的属性值转换问题
修复模型保存后事件的参数类错误问题
修复项目在特殊路径下启动报错问题
修复 SQL 报错会出现 “Call to a member function closeCursor() on null” 错误的问题
修复模型批量更新方法中,自定义连接池名不生效的问题
修复模型注解设置 poolName 不生效问题 #40
修复模型生成工具的 poolName 参数值,没有生成到 Table 注解里的问题 #38
Published by Yurunsoft over 4 years ago
新增 Imi::getNamespacePaths() 获取所有命名空间路径的可能性
新增 File::absolute(),相比 realpath() 函数,在文件不存在时也可以有效
支持加载项目命名空间映射为多个目录情况下的 .env 配置文件
跨域中间件 OptionsMiddleware 支持多个 allowOrigin
修复随 Manager 启动进程别名问题
修复协程上下文的响应代理类问题
Published by Yurunsoft almost 5 years ago
准备欢度春节(划水),春节前最后一个版本,放完假恢复更新
新增本地连接上下文存储处理器:ConnectContextLocal,可用于 SWOOLE_BASE 模式
新增 ElasticSearch 文档
尝试修复一个问题
修复 DEPRECATED 提示
Published by Yurunsoft almost 5 years ago
运行时目录路径默认识别失败时抛出异常提示
增加 swoole.use_shortname 必须启用的检测,避免用户因使用友商框架导致无法正常启用 imi 又不明原因的问题
新增 Db::transContext() 方法
支持获取随服务启动的进程对象 #35
Published by Yurunsoft almost 5 years ago
本周推出了 imi-jwt 组件,支持在 imi 框架中非常方便地接入 jwt
但是 jwt 绝不是 session 的替代品!!!请大家一定要弄清楚!!!
最近很忙,忙于开发项目,项目当然是用 imi 框架在开发……祝大家2020年头发依然健在!
【宇润】基于 PHP + Swoole 的 imi 框架新手入门课程 | 每周五更新 | 从秃头到满头秀发,让你有更多时间上班划水,脱单不再是梦
戳我免费看从秃头到满头秀发的 imi 框架教程https://www.bilibili.com/video/av78158909
每周五晚上,更新一集哦~
新增 imi-jwt 组件,支持在 imi 框架中非常方便地接入 jwt (传送门)
新增支持监听事务提交和回滚事件 (文档)
Event->off() 方法现在可以不传第二个参数,允许清空事件中所有监听 (文档)
WebSocket 控制器和动作注解支持限定握手路由地址(比如某个 WS 通讯处理,只有握手某个 url 时才可以触发)(文档)
WebSocket 握手时向 ConnectContext 写入 uri 对象
新增 TNotRequiredDataToProperty,相比 TDataToProperty 允许不传构造方法参数
重构:分离数据库事务管理对象
优化 Facade 生成类注释的,参数和返回值可为空、参数默认值
优化当 Main 类不存在时的异常提示文字
修复握手响应返回后写入连接上下文,导致有时刚握手完 WebSocket 通讯获取连接上下文数据不正确的问题
修复事务嵌套回滚bug
修复部分场景下的参数类型问题
修复 ConnectContext::muiltiSet() 方法写入无效问题
修复多个服务使用 http session 时的配置冲突问题
Published by Yurunsoft almost 5 years ago
本周推出了 imi-amqp 组件,支持在 imi 框架中使用支持 AMQP 协议的消息队列,如:RabbitMQ
从此你就可以在 imi 框架里一把梭使用消息队列啦!
【宇润】基于 PHP + Swoole 的 imi 框架新手入门课程 | 每周五更新 | 从秃头到满头秀发,让你有更多时间上班划水,脱单不再是梦
戳我免费看从秃头到满头秀发的 imi 框架教程👉https://www.bilibili.com/video/av78158909
每周四或五晚上,更新至少一集~
新增 imi-amqp 组件 (传送门)
Redis 缓存支持设定 replaceDot,将 key 中的 "." 替换为 ":" (文档)
Redis 缓存支持设定 prefix 缓存键前缀 (文档)
增强进程随服务启动 (文档)
修复连接池资源项没有锁定问题
修复连接池心跳检测有时引起报错的问题
修复 Redis ping() 方法,在扩展版本为 5.x 时,返回值判断问题
Published by Yurunsoft almost 5 years ago
本周主要做了一些兼容性优化工作,方便大家在各种系统中使用 imi 框架开发。
【宇润】基于 PHP + Swoole 的 imi 框架新手入门课程 | 每周五更新 | 从秃头到满头秀发,让你有更多时间上班划水,脱单不再是梦
戳我免费看从秃头到满头秀发的 imi 框架教程👉https://www.bilibili.com/video/av78158909
已更新第 4 集,每周四晚上更新至少一集~
优化 MacOS 及部分 Linux 发行版兼容性
调整 Cron 进程 sock 文件名
修复 Bean 类一些问题
修复有时注解不生效问题
修复异常无法记录问题
修复 MacOS 系统无法使用热更新问题,采用 unix socket 通讯
修复验证器注解 callable={@Inject("BeanName"), "methodName"}
无效问题
修复在有些环境下,imi 命令行生成不正确的问题
Published by Yurunsoft almost 5 years ago
本周主要针对底层做了一些优化,并且修复了一些大家反馈的 bug,具体可以看下面的更新日志。
本周放出了 2 集视频教程(2.Http 请求和响应、3.Http 中间件),欢迎大家观看学习:https://www.bilibili.com/video/av78158909?p=3
另外 imi 正在进军物联网行业,阶段性放出的成果是时序数据库 InfluxDB 的 ORM:https://github.com/Yurunsoft/influxdb-orm
一个用于 InfluxDB 时序数据库的 ORM,终结没有 InfluxDB ORM 的时代。
常用操作一把梭,支持 php-fpm、Swoole 环境,一键轻松切换。
可以用于所有传统框架、所有 Swoole 框架中!
欢迎大家尝试!
server/reload
命令增加 -runtime
参数,可以更新运行时缓存后,再重新加载服务 (文档)
Text::startwith()
、Text::endwith()
增加是否区分大小写的参数:$caseSensitive = true
(文档)
定时任务捕获到异常会抛出异常
异常日志支持无限级 Previous
新增支持忽略扫描指定类或命名空间 (ignoreNamespace)
新增 MediaType::IMAGE_ICON
Redis
快捷操作类支持 evalEx()
方法 (文档)
连接池心跳调整只针对空闲资源进行操作,防止多个协程执行出现错误
修复 CronProcess
报 Warning
问题
修正几处代码语义化问题
优化 Statement
,只有当执行 insert、replace
语句时,才获取 lastInsertId
注解处理类不再对非 imi 注解做处理,与其它类库兼容性更好
更新注解依赖包命名空间