imi

imi 是一款支持长连接微服务分布式的 PHP 开发框架,它可以运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。它支持 HttpApi、WebSocket、TCP、UDP、MQTT 服务的开发。特别适合互联网微服务、即时通讯聊天im、物联网等场景!QQ群:17916227

OTHER License

Downloads
54.5K
Stars
1.2K
Committers
38

Bot releases are hidden (Show)

imi - v1.3.14

Published by Yurunsoft about 3 years ago

修复

  • Use apcu instead of apc (#159)

  • 修复 Cron client 关闭问题

  • 修复 imi-access-control model建表语句是空白的问题

imi - v2.0.4

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

imi - v1.3.13

Published by Yurunsoft about 3 years ago

修复

  • 修复 ArrayUtil::random() 取出一条数据时的问题

  • 修复 PolymorphicToOne 注解的 insert、update、delete 关联操作 (#151)

  • 修复软删除默认值为null,查询出错 (#146)

imi - v1.3.12

Published by Yurunsoft about 3 years ago

优化

  • 优化进程加锁异常文本

修复

  • 修复动态移除定时任务

  • 修复连接池gc导致的,多个协程读写同一个连接问题

imi - v2.0.3

Published by Yurunsoft about 3 years ago

增强

  • 数据库对象新增 ping() 方法替代旧的 isConnected() 方法作用,现在 isConnected() 方法仅本地检测是否连接,并不会尝试通信

  • 增强发送文件功能,支持文件名、ContentType指定或自动识别

  • 新增注解解析文件缓存、bean文件缓存开关配置

优化

  • 兼容 Swoole 里不带 host 请求头的 HTTP 请求

  • 优化进程加锁异常文本

  • 优化一些代码

修复

  • 修复查询构建器的 group 方法

  • 修复动态移除定时任务

  • 修复连接池gc导致的,多个协程读写同一个连接问题

imi - v2.0.2

Published by Yurunsoft about 3 years ago

增强

  • 统一所有数据库预处理,支持:问号、冒号参数,绑定值时参数名是否传问号都生效

  • 连接池支持按照最大空闲时间对资源执行Gc (#138) (@NHZEX)

  • ignorePaths、appIgnorePaths 支持通配符 #137

优化

  • 优化队列消费者创建新协程消费消息

  • 优化一些代码

修复

  • 转换文件编码为utf8 (#136) (@NHZEX)

  • 修复 pgsql 问题

  • 修复非连接池模式下,连接重复实例化的问题

  • 修复连接池资源回收时间精度问题

  • 修复 amqp 心跳

  • 修复 ConsoleHandler 构造方法参数

  • 修复 fpm 模式 Response->setCookie() 问题 #141

文档

  • fix token claim (#140) (@yyforeveryl)
imi - v1.3.11

Published by Yurunsoft about 3 years ago

优化

  • 优化队列消费者创建新协程消费消息

修复

  • 修复连接池资源回收时间精度问题

  • 修复 amqp 心跳

imi - v2.0.1

Published by Yurunsoft about 3 years ago

增强

  • 新增 imi-pgsql (#132)

  • 新增模型关联 PolymorphicToOne 的 Insert、Update、Delete 支持

  • 命令行参数输入功能增强 (#133)

  • 命令行 BOOL 类型参数默认支持开关形式

  • 命令行工具支持功能描述信息 (#129)

优化

  • 优化了一些代码

修复

  • 修复 Swoole 组件依赖问题

  • 修复连接池配置的 gcInterval 不能为 null 的问题

imi - v2.0.0

Published by Yurunsoft about 3 years ago

imi v2.0 发布,PHP 长连接分布式开发框架

image

imi v2.0

框架介绍

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 等

2.0 版本介绍

  • 多容器:支持 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 7.4、8.0
  • Swoole >= 4.7
  • Windows、Liunx、MacOS

新特性

  • 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 简直是暴殄天物

PHP 8.0 原生注解支持

image

长连接服务分布式解决方案

image

image

image

Demo 体验:https://github.com/imiphp/imi-project-websocket;

后续计划

  • 让更多组件支持在非 Swoole 环境下运行

  • 支持 Swow、RoadRunner 环境

  • 长连接分布式解决方案,支持更多消息中间件、网关

  • 更多微服务化的组件开发和深度集成

  • imi v2 免费视频教程、源码分析视频等

拥抱开源

  • 我们日常开发中使用的绝大多数软件,都是开源软件(VSCode、PHP、Nginx、MySQL、Redis 等)

  • 宇润非常希望能有更多的人可以参与到包括 imi 在内的开源项目中来,为 PHP 生态建设献出一份力!

  • 参与开源门槛其实不高,你的使用、反馈、建议、bug 修复、代码贡献等等,才是为开源项目添砖加瓦,我为人人,人人为我,让开源项目能够帮助到更多的人。

  • 开源不是免费、白嫖、无私奉献,且用且珍惜……

imi - v1.3.10

Published by Yurunsoft about 3 years ago

修复

  • 修复获取不存在sid时,Redis返回false导致decode报错,强制返回string类型 (#106)

  • 修复 RequestContextProxy

  • 修复非数据库字段乱入问题

  • 修复模型多对多查询时,Sql 注解失效问题

  • 修正多态多对多关联 (#121)

  • 修复模型处理 json 类型字段时,值为 null 时候报错

  • 修复 list 类型字段,内容为空字符串时数组不为空的问题

  • 修复模型多态关联初始化值的问题

  • 修复热更新排序规则不生效问题,优化热更新

imi - v1.3.9

Published by Yurunsoft about 3 years ago

修复

  • 修复子进程协程场景下释放连接的报错问题

  • 修正 Kafka 代码

  • 修复 Redis 代码兼容性

  • 修复 jwt deprecated 提示

  • 修复模型指定字段星号查询后,虚拟字段序列化失效问题

imi - v1.3.8

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()

文档

  • fix 文档-定时任务错误 (#99)
imi - v1.3.7

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 问题

代码质量

  • 增加 Swoole 4.7 测试
imi - v1.3.6

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恤

1625279067426

当然你也可以抢先下单体验, 支持一下 imi~

微信扫码:

WH)BIOS ZRLE0ME96_50VCG

imi - v1.3.5

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 默认不为驼峰的问题

imi - v1.3.4

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

  • 新增模型生成器指定参数,是否检查字符串字段长度

修复

  • 修复 Serializable 注解对 null 值字段不生效问题
imi - v1.3.3

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

如果有任何问题,欢迎联系我们!


更新日志

优化

  • 优化框架底层处理 PHP 错误级别

修复

  • 修复未启用 task_enable_coroutine 时在 Task 进程使用连接池的问题

  • 修复不规范请求导致的 notice 提示问题

imi - v1.3.2

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本已基本完成开发,正在进行文档编写工作。

最近把官网、文档模版、所有组件都挪到了 imi 主仓库进行维护。

以后所有的 issue、Pull Request 都在主仓库进行。


imi v2 版本最新规划及动态: https://github.com/Yurunsoft/imi/issues/66

如果有任何问题,欢迎联系我们!


更新日志

优化

  • 优化 ConnectionBinder 使用 ServerBean

修复

  • 修复模型保存更新问题

  • 修复 Entity 注解 camel 设为 false 失效问题

  • 修复关联模型问题

  • 修复模型查询后的序列化问题

  • 修复因心跳导致的,偶现连接跨协程使用问题

  • 修复在用户进程中,向客户端推送数据有警告的问题

  • 修复生成用注释表示的方法时,默认值中有数组时的格式问题

  • Fix typo (#95)

imi - v1.3.1

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,模型对象序列化时不会把不相关字段返回

修复

  • 修复在 task 进程中没有启用一键协程化的问题
imi - v1.3.0

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 主项目中维护

Package Rankings
Top 1.63% on Packagist.org
Badges
Extracted from project README
Latest Version Php Version Swoole Version imi Doc imi License star codecov 点击加群 贡献者