imi 是一款支持长连接微服务分布式的 PHP 开发框架,它可以运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。它支持 HttpApi、WebSocket、TCP、UDP、MQTT 服务的开发。特别适合互联网微服务、即时通讯聊天im、物联网等场景!QQ群:17916227
OTHER License
Bot releases are visible (Hide)
Published by Yurunsoft about 3 years ago
Use apcu instead of apc (#159)
修复 Cron client 关闭问题
修复 imi-access-control model建表语句是空白的问题
Published by Yurunsoft about 3 years ago
imi-queue 消费进程兼容 workerman
imi-amqp 兼容非 Swoole
imi-kafka 兼容非 Swoole
Workerman 环境中支持对数据库和 Redis 连接设置心跳
新增 Imi::checkAppType()
RedisModel 支持设置 Formatter
新增 Redis UnixSocket 支持 (#144)
增强 ArrayUtil::random(),支持返回不带键名的数组
Imi\ttyExec() 增强
定时任务进程支持终端回显 (#150)
新增多容器下统一的IMI.SERVER.WORKER_START、IMI.SERVER.WORKER_STOP事件
模型生成为属性增加字段真实的默认值
优化非连接池的Db、Redis获取连接、断线重连能力
优化当 Workerman worker 启动时,清理父进程带来的数据库连接
事件 IMI.APP_INIT 改名为 IMI.APP_RUN 避免与 IMI.APP.INIT 混淆
框架版本变化后运行时缓存自动重置 (#145)
优化 Runtime 扫描和存储 (#155)
新增连接失败后的抛出异常
提升验证帮助类的参数类型容错度 #156
优化了一些代码
修复 ArrayUtil::random() 取出一条数据时的问题
修复 Cron unique 配置问题
修复定时任务锁参数类型错误 (#149)
修复少部分环境下的启用问题
修复定时任务 unique 从连接池获取连接失败问题
修复软删除默认值为null,查询出错 (#146)
修正 Imi\AMQP\Contract\IPublisher 定义
修复 in、notIn 验证不支持字符串的问题
修复手动绑定 bean 的情况下单例失效问题
修复 joinRaw 强类型兼容问题 #157
Published by Yurunsoft about 3 years ago
修复 ArrayUtil::random() 取出一条数据时的问题
修复 PolymorphicToOne 注解的 insert、update、delete 关联操作 (#151)
修复软删除默认值为null,查询出错 (#146)
Published by Yurunsoft about 3 years ago
修复动态移除定时任务
修复连接池gc导致的,多个协程读写同一个连接问题
Published by Yurunsoft about 3 years ago
数据库对象新增 ping() 方法替代旧的 isConnected() 方法作用,现在 isConnected() 方法仅本地检测是否连接,并不会尝试通信
增强发送文件功能,支持文件名、ContentType指定或自动识别
新增注解解析文件缓存、bean文件缓存开关配置
兼容 Swoole 里不带 host 请求头的 HTTP 请求
优化进程加锁异常文本
优化一些代码
修复查询构建器的 group 方法
修复动态移除定时任务
修复连接池gc导致的,多个协程读写同一个连接问题
Published by Yurunsoft about 3 years ago
统一所有数据库预处理,支持:问号、冒号参数,绑定值时参数名是否传问号都生效
连接池支持按照最大空闲时间对资源执行Gc (#138) (@NHZEX)
ignorePaths、appIgnorePaths 支持通配符 #137
优化队列消费者创建新协程消费消息
优化一些代码
转换文件编码为utf8 (#136) (@NHZEX)
修复 pgsql 问题
修复非连接池模式下,连接重复实例化的问题
修复连接池资源回收时间精度问题
修复 amqp 心跳
修复 ConsoleHandler 构造方法参数
修复 fpm 模式 Response->setCookie() 问题 #141
Published by Yurunsoft about 3 years ago
修复连接池资源回收时间精度问题
修复 amqp 心跳
Published by Yurunsoft about 3 years ago
新增 imi-pgsql (#132)
新增模型关联 PolymorphicToOne 的 Insert、Update、Delete 支持
命令行参数输入功能增强 (#133)
命令行 BOOL 类型参数默认支持开关形式
命令行工具支持功能描述信息 (#129)
修复 Swoole 组件依赖问题
修复连接池配置的 gcInterval 不能为 null 的问题
Published by Yurunsoft about 3 years ago
imi v2.0 发布,PHP 长连接分布式开发框架
imi 是一款支持长连接微服务分布式的 PHP 开发框架,它可以运行在 PHP-FPM、Swoole、Workerman 多种容器环境下。
imi 支持开发 Http 接口,以及 Http2、WebSocket、TCP、UDP、MQTT 等常驻内存服务。
imi 拥有丰富的功能组件,v2.0 版本内置了 2 个分布式长连接服务的解决方案。
imi 框架现在已经稳定运行在:文旅电商平台、物联网充电云平台、停车云平台、支付微服务、短信微服务、钱包微服务、卡牌游戏服务端、数据迁移服务(虎扑)等项目中。
imi 第一个版本发布于 2018 年 6 月 21 日
感谢群里抢先体验 imi 2.0,提出建议和反馈 bug 的开发者们!
感谢 @Gumo666 @NHZEX @loyating 等开发者对 imi 文档或代码的贡献!
宇润(张润宇),1994 年 3 月 12 日(植树节)出生于无锡。
初二开始就自学编程,喜欢 C#,但事与愿违,工作后一直从事 PHP 开发工作。
imi 框架创始人,Swoole 开发组成员,宇润 PHP 系列组件作者。
开源项目包括但不限于:imi、PaySDK、YurunHttp、Guzzle-Swoole、YurunOAuthLogin、ChineseUtil 等
多容器:支持 Swoole、Workerman、PHP-FPM 等
分布式:无心智负担的长连接分布式解决方案
高性能:常驻内存 + PHP 8.0 JIT
次世代:下一代 PHP 框架(与 Laravel Octane 的多容器支持理念,不谋而合)
2.0 版本目前处于测试阶段,不久之后将发布正式版本
创建 Http Server 项目:composer create-project imiphp/project-http
创建 WebSocket Server 项目:composer create-project imiphp/project-websocket
创建 TCP Server 项目:composer create-project imiphp/project-tcp
创建 UDP Server 项目:composer create-project imiphp/project-udp
PHP 8.0 原生注解(原注释写法依旧支持)
内置长连接服务分布式解决方案,助力 PHP 物联网生态
多容器支持,可以运行在 Swoole、Workerman、PHP-FPM、Cli 环境
解决痛点:beanScan、Main 类等现已是非必选项
解决痛点:PSR-7 基础上增加 setXXX 方法,保留 withXXX 并完全兼容 PSR-7
命令行包改用 symfony/console
日志组件改用 monolog/monolog
等……
废除 v1 中不合理、写法啰嗦的地方,简化配置,imi 让开发项目一把梭的理念从未改变
将一些功能,交给更加成熟的第三方包,imi 有它自己的使命
全部使用强类型、严格模式开发,保证代码质量
重构底层,让框架支持在多种服务容器下运行(Swoole、Workerman、PHP-FPM 等),方便扩展
专注提升分布式长连接服务开发体验,这是目前市面上框架的不足之处,还只是用来开发 Http 服务,这么用 Swoole 和 Workerman 简直是暴殄天物
让更多组件支持在非 Swoole 环境下运行
支持 Swow、RoadRunner 环境
长连接分布式解决方案,支持更多消息中间件、网关
更多微服务化的组件开发和深度集成
imi v2 免费视频教程、源码分析视频等
我们日常开发中使用的绝大多数软件,都是开源软件(VSCode、PHP、Nginx、MySQL、Redis 等)
宇润非常希望能有更多的人可以参与到包括 imi 在内的开源项目中来,为 PHP 生态建设献出一份力!
参与开源门槛其实不高,你的使用、反馈、建议、bug 修复、代码贡献等等,才是为开源项目添砖加瓦,我为人人,人人为我,让开源项目能够帮助到更多的人。
开源不是免费、白嫖、无私奉献,且用且珍惜……
Published by Yurunsoft about 3 years ago
修复获取不存在sid时,Redis返回false导致decode报错,强制返回string类型 (#106)
修复 RequestContextProxy
修复非数据库字段乱入问题
修复模型多对多查询时,Sql 注解失效问题
修正多态多对多关联 (#121)
修复模型处理 json 类型字段时,值为 null 时候报错
修复 list 类型字段,内容为空字符串时数组不为空的问题
修复模型多态关联初始化值的问题
修复热更新排序规则不生效问题,优化热更新
Published by Yurunsoft about 3 years ago
修复子进程协程场景下释放连接的报错问题
修正 Kafka 代码
修复 Redis 代码兼容性
修复 jwt deprecated 提示
修复模型指定字段星号查询后,虚拟字段序列化失效问题
Published by Yurunsoft about 3 years ago
imi v2.0 代码已经公开
修复在未安装 git 的环境中的报错问题
修复 JWT 旧版本升级后的配置兼容性问题
修复 Imi\Db\Drivers\Swoole\Statement->nextRowset()
修复极端情况下的 Imi\Util\Composer::getPathNamespaces() 返回结果
修复极端情况下的 Imi\Db\Drivers\Swoole\Statement->fetchColumn()
Published by Yurunsoft about 3 years ago
imi v2.0 即将发布,敬请期待哦~
#98 新增支持 Redis 哨兵模式、集群模式;cache、lock、queue、rate-limit 改造兼容
imi-jwt 组件兼容支持 PHP 8.0
AMQP 组件升级
新增为一个列表查询指定关联便捷方法(\Imi\Model\Model::queryRelationsList($modelList)
)
修复组件仓库同步问题
修复 access-control 模型
修复模型指定字段查询后,序列化字段时 camel 设置无效问题
修复 AMQP 队列 pop 问题
Published by Yurunsoft over 3 years ago
目前 imi v2.0 版本已基本完成开发和文档编写工作,正在准备发布介绍PPT及视频。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。并且将原仓库(yurunsoft/imi)迁移至(imiphp/imi)
以后所有的 issue、Pull Request 都在 imiphp/imi 进行。
imi v2.0 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
修复极端情况下的 AMQP 队列 pop 问题
修复查询构建器别名功能下的绑定参数问题(可能影响软删除等功能)
imi v2.0 版本发布临近,等视频发布后,同时会组织活动,抽奖赠送一些 imi 周边产品,包括印有 imi Logo 的手机壳(所有主流型号都有)、T恤
当然你也可以抢先下单体验, 支持一下 imi~
微信扫码:
Published by Yurunsoft over 3 years ago
目前 imi v2 版本已基本完成开发和文档编写工作,正在准备发布介绍PPT及视频。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。并且将原仓库(yurunsoft/imi)迁移至(imiphp/imi)
以后所有的 issue、Pull Request 都在 imiphp/imi 进行。
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
修复消息队列消费进程问题
修复模型字段长度判断,赋值不是字符串的情况
修复 ConnectContextRedis 的 lockId 设为 null 报错问题
修复 RedisModel 默认不为驼峰的问题
Published by Yurunsoft over 3 years ago
目前 imi v2 版本已基本完成开发和文档编写工作,正在准备发布介绍PPT及视频。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。并且将原仓库(yurunsoft/imi)迁移至(imiphp/imi)
以后所有的 issue、Pull Request 都在 imiphp/imi 进行。
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
新增支持数据库连接后,执行初始化的 SQL
新增模型生成器指定参数,是否检查字符串字段长度
Published by Yurunsoft over 3 years ago
目前 imi v2 版本已基本完成开发和文档编写工作,正在准备发布介绍PPT及视频。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。并且将原仓库(yurunsoft/imi)迁移至(imiphp/imi)
以后所有的 issue、Pull Request 都在 imiphp/imi 进行。
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
修复未启用 task_enable_coroutine 时在 Task 进程使用连接池的问题
修复不规范请求导致的 notice 提示问题
Published by Yurunsoft over 3 years ago
目前 imi v2 版本已基本完成开发,正在进行文档编写工作。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。
以后所有的 issue、Pull Request 都在主仓库进行。
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
修复模型保存更新问题
修复 Entity 注解 camel 设为 false 失效问题
修复关联模型问题
修复模型查询后的序列化问题
修复因心跳导致的,偶现连接跨协程使用问题
修复在用户进程中,向客户端推送数据有警告的问题
修复生成用注释表示的方法时,默认值中有数组时的格式问题
Fix typo (#95)
Published by Yurunsoft over 3 years ago
此版本应广大用户要求,增强优化了一波数据库和模型操作。
目前 imi v2 版本开发进度顺利,即将进入文档编写阶段。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。
以后所有的 issue、Pull Request 都在主仓库进行。
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
如果有任何问题,欢迎联系我们!
新增支持在控制器注解中,指定当前控制器允许哪些服务器使用
新增支持手动设置模型对象的序列化字段
查询构建器的原生 SQL 语句相关方法,支持传入别名
查询构建器支持获取和设置结果集类名
支持为查询出来的关联模型指定字段
数据库查询构建器支持 json 查询条件、排序 #91
新增 Sql 注解,支持为虚拟字段定义 SQL 语句,模型查询时自动带上改字段 #92
去除不必要的 use
Github Actions 优化 (#90)
优化模型查询时如果指定 field,模型对象序列化时不会把不相关字段返回
Published by Yurunsoft over 3 years ago
目前 imi v2 版本开发进度顺利,即将进入文档编写阶段。
最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。
以后所有的 issue、Pull Request 都在主仓库进行。
imi v1.3.0 版本发布,功能与 v1.2.26 一致,唯一差别就是不再支持 Swoole 4.3。
由于 Swoole 4.3 用户已经不多,并且维护兼容困难,所以做出了不兼容决定。
imi v1.0.x-1.2.x 支持 Swoole 4.3 + PHP 7.1。
imi v1.3.x 支持 Swoole 4.4 + PHP 7.1。
如果有任何问题,欢迎联系我们!
imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66
请求上下文生成工具支持 interface
新增 __setProxyInstance() 方法用于设置请求上下文中的实例
生成生成请求上下文代理类支持指定 Bean 注解名称
生成请求上下文代理类新增 interface 参数,指定生成的目标类要实现的接口
优化生成工具,当目录不存在时自动创建目录再保存文件
优化请求上下文代理类静态方法不再加入IDE提示中
优化生成请求上下文代理类不再生成静态方法,修复实现接口问题
重新生成 RequestProxy、ResponseProxy
连接上下文锁改为非必设
优化了一些代码
修复被注入的方法参数为空时,无法使用 func_get_args() 获取动态参数的问题
修复返回值为类时的反射转代码问题
修复反射生成代码的 self 解析问题
修复上下文代理设置 Bean 注解后,使用错误问题
新增自动同步 Gitee
将官网移动到 imi 主项目中维护
将文档模版移动到 imi 主项目中维护
将所有组件移动到 imi 主项目中维护