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

imi - v1.2.26

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,即将进入文档编写阶段。

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

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


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

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

imi - v1.2.25

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,即将进入文档编写阶段。

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

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


更新日志

增强

  • 新增 ClassObject::convertArrayToKV()、convertKVToArray()、newInstance() 方法

  • 增加 Http 参数不存在时的异常抛出

优化

  • 优化一些代码

修复

  • 修复 PHP 8 联合类型兼容问题

  • 修复一处类型问题

  • 修复启用协程的命令行工具,未初始化异步连接池的问题

  • 修复监听事务提交事件中,开启事务并出现提交或回滚导致的死循环

imi - v1.2.24

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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


更新日志

增强

  • 增强 Inject 注解不指定 name 时的作用

优化

  • 优化连接池关闭

  • 当出错 exit 时增加 exit code 255

修复

  • 修复 BinderHandler

  • 修复开启 Opcache 后热更新失效问题

  • 修复注入返回值为 void 的方法问题

  • 修复 deprecated 提示

  • 修复 Swoole 4.5 下热重启错误

  • 修复 Swoole Server start、ManagerStart、WorkerStart 事件抛出异常并捕获后,未退出进程造成的问题

imi - v1.2.23

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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


更新日志

增强

  • 新增连接绑定器本地驱动

  • 增强连接绑定器,支持指定处理器类

  • 支持模型软删除 #76

  • 新增表生成的前后置操作事件

  • 新增分组本地驱动 GroupLocal

优化

  • 优化MySQL、Redis 连接重置、连接池关闭

  • 减少打印日志时对 debug_backtrace 的调用、支持设定 Log 组件的 debug_backtrace 回溯限制 (#81)

修复

  • 修复 SQL 监听 #80

  • 修复生成模型不指定 baseClass 时的“BaseClass Imi\Model\Model not extends Imi\Model\Model”错误提示

imi - v1.2.22

Published by Yurunsoft over 3 years ago

随便说说

最近 PHP 界热闹了起来,也多出了很多瓜可以吃,有点意思~

QQ图片20210319162719


目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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


更新日志

增强

  • 新增支持配置 JsonObjectParser、JsonArrayParser 序列化时的参数

  • 新增 JsonEncode 注解,支持设定 JSON 类型字段序列化时的配置 (#77)

  • 新增根据注释或声明类型,实现 Inject、RequestInject、ServerInject 的智能注入

  • 新增 ConnectContext::getFd() 获取当前连接号

  • 更新 generate/model 工具,支持定义生成模型所继承的基类 (#78)

优化

  • 优化 JsonErrorHandler 使用 JsonView 实现

  • 优化 Group

修复

没有已知 BUG

imi - v1.2.21

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI


更新日志

增强

  • Http 路由支持 ./ 用法

  • Server 工具类新增:sendByFlag、sendRawByFlag、close、closeByFlag 方法

  • Server 工具类 send()、sendByFlag()、sendRaw()、sendRawByFlag() 支持 SWOOLE_BASE 模式跨进程推送

  • Server 工具类 sendToGroup()、sendRawToGroup() 支持 SWOOLE_BASE 模式跨进程推送

优化

  • 引入代码静态分析、格式检测

  • 更新 .env 组件版本 #75

  • 模型类的 save() 方法不再使用 replace 实现

  • 优化向 WebSocket 推送时判断连接合法性

  • 优化热更新

  • 优化 ConnectionBinder

修复

  • 修复停止服务命令报错问题

  • 修正异常内容的拼写

  • 修复 Group isInGroup()、getFds() 方法不存在问题

imi - v1.2.20

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI


目前已经进入无心撸码,只想放假的状态~

🏮祝大家 2021 春节快乐~


更新日志

优化

  • 优化处理多行SQL语句时过滤空SQL

  • 统一大小写

修复

  • 修复 stopServer、reloadServer

  • 修复热重启超时问题

  • 修复热更新缓存文件体积不断增加

  • 修复从模型生成表

  • 修复模型生成工具在字段类型为 json 时的问题

  • 修复 RedisGroup->isInGroup()

  • 修复特定情况下监听事务提交和回滚的问题

imi - v1.2.19

Published by Yurunsoft over 3 years ago

随便说说

目前 imi v2 版本开发进度顺利,如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI


更新日志

增强

  • 新增 SQL 监听功能

  • 新增 JsonNotNull 注解

优化

  • 优化模型中的 find、update、delete 操作

  • 优化 PdoMysql->exec() 返回值判断

  • 优化 limit 不再使用参数绑定,而是转为 int 后拼接

  • 优化 RedisManager::getNewInstance()

修复

  • 修复 HTTP 请求不带 host 请求头时解析报错问题

  • 修复模型查询指定关联问题

  • 修复 RedisModel::deleteBatch() hash 模式返回值问题

  • 修复 PoolConfig 2个方法的返回值

  • 修复 RedisManager::release()、Db::release()

  • 修复在 Docker 中停止、重启服务时,如果环境没有安装 kill 命令的报错问题 #74

imi - v1.2.18

Published by Yurunsoft almost 4 years ago

随便说说

目前 imi v2 版本已经开始开发了(2020-09)如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI


更新日志

增强

  • 路由注解新增 paramsBody 参数,支持从 JSON、XML 中决定路由

  • 路由注解新增 paramsBodyMultiLevel 参数,支持指定是否为多级参数获取

  • 新增检查 UDP 重复路由

  • 新增检查 TCP 重复路由

  • 新增检查 WebSocket 重复路由

  • 新增检查 HTTP 重复路由

优化

  • 优化代码

修复

  • 修复在 WebSocket OnOpen 事件中 push 失败问题

  • 修复 Server->hasGroup()、Server->getGroup()

  • 修复方法参数默认值判断问题

  • 修复连接池开启心跳后,偶现的多协程使用同一个连接的问题

imi - v1.2.17

Published by Yurunsoft almost 4 years ago

随便说说

本版本开始已经兼容了 PHP 8.0,并且将 PHP 8.0 加入了自动化测试中。


目前 imi v2 版本已经开始开发了(2020-09)如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI


11月去医院住了两周,导致没有提交代码和发布版本,目前状态良好,恢复更新!

更新日志

增强

  • 新增正则验证注解

  • 新增 RequestContextProxy

  • 新增模型关联前置和后置事件

所有新增特性都可以在 文档 里找到哦

优化

  • 自动化测试抛弃 travis,向 GitHub Actions 迁移

  • 连接上下文操作增加 fd 判断

  • 优化缓存参数key不为字符串时的错误提示

  • 去除模型生成工具多余的参数绑定

  • 为部分不稳定的测试增加重试

修复

  • 修复 RequestProxy->getAttribute()

  • 修复 Server::sendMessage() workerID 获取不到的问题

  • 修复 Mysqli 驱动的编码不生效问题 #71

  • 修复 mysqli 报错:mysqli::next_result(): There is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/method

imi -

Published by Yurunsoft almost 4 years ago

随便说说

鉴于大家的热情及需求,imi v1 版本继续进行功能性开发直至 v2 版本发布,如果有需求依然可以跟我们提哦!

目前 imi v2 版本已经开始开发了(2020-09)如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI

为 imi 投一票:https://www.oschina.net/project/top_cn_2020#imi

更新日志

增强

  • 新增模型字段类型list

  • 增加 protected 方法的注入和注解支持

优化

  • 优化:数据库事务事件中抛出异常,会清空事件

修复

  • 修复删除目录方法,会将软连接指向的目录也删除的问题
imi -

Published by Yurunsoft almost 4 years ago

随便说说

鉴于大家的热情及需求,imi v1 版本继续进行功能性开发直至 v2 版本发布,如果有需求依然可以跟我们提哦!

目前 imi v2 版本已经开始开发了(2020-09)如果有任何问题,欢迎联系我们!

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

imi 正式成为了码云 GVP 项目,大家也可以到码云关注下哦!(https://gitee.com/yurunsoft/IMI

为 imi 投一票:https://www.oschina.net/project/top_cn_2020#imi

更新日志

增强

  • 引入格式化代码标准

  • Random 工具类生成随机字符,支持只传入 $min 时使用固定长度 #68

优化

  • 连接池 requestResourceCheckInterval 配置项默认值从 3 改为 30,并且支持设为 null 则不限制

  • 优化了一些代码

修复

  • 修复 phpunit 兼容性问题

  • 修复 $_SERVER 部分情况下的兼容问题

  • 修正一些错别字

imi -

Published by Yurunsoft about 4 years ago

随便说说

目前 imi v2 版本已经开始开发了(2020-09),v1 版本进入维护期,原则上仅修复问题不再加入新特性。如果有任何问题,欢迎联系我们!

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

祝大家过一个愉快轻松的国庆假期,2020年最后一个长假,且过且珍惜吧~

更新日志

增强

  • 新增支持 MySQLi 数据库驱动

  • Http 路由支持智能尾部斜杠,无论是否存在都匹配 #67

  • 生成模型命令,支持将生成的SQL处理为单行

优化

  • 优化了一些代码

修复

  • 修复 Swoole Mysql Statement 问题

  • 修复在服务器配置中,注入 HttpRoute 属性无效问题

  • 修复 whereIsNull() whereIsNotNull() 查询报错问题

  • 修复日志文件拆分文件名问题

imi -

Published by Yurunsoft about 4 years ago

随便说说

目前 imi v2 版本已经开始开发了(2020-09),v1 版本进入维护期,仅修复问题不再加入新特性。如果有任何问题,欢迎联系我们!

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

更新日志

优化

  • 按名称投递任务时,任务执行类使用 BeanFactory 实例化 #65

  • 优化 Imi::eval() 方法,避免文件名重复

  • 优化了一些代码

修复

  • 修复在非请求上下文环境下,调用 Server::sendToGroup() 错误问题

  • 修复在非请求上下文环境下,调用 Server::send() 错误问题

  • 修复 Lock::getInstance() 多次调用传入不同的 LockId 无效问题

  • 修复ConnectContext::create()初始化数据无法写入问题

  • 修复 Event::one() 在事件抛出异常时,之后再次触发事件,还会被调用的问题

  • 修复 defer() 问题

imi -

Published by Yurunsoft about 4 years ago

更新日志

增强

  • Request 的 get、post、request 支持 with 方法

  • 新增支持苹果系统自动化测试,保证了MacOS用户使用imi时的可靠性

  • 新增工具、进程异常捕获机制,现在的日志不会再被截断trace

优化

  • 优化路由处理中,判断请求地址的取方式

  • 优化执行命令行的代码,不会再出现sh进程(Swoole >= 4.5.3)

  • Imi::eval()方法中,使用 fopen x 模式替代 tempnam(性能会略好,修复某些特殊环境下的问题)

修复

  • 修复 parsedBody 问题

  • 修复改变当前工作目录后,无法正常执行 imi 命令的问题 #63

  • 修复进程类型的定时任务问题

随便聊聊

一个月没有发版,这段时间一直在折腾项目,研究C++。总算是出了一点成果的:https://github.com/Yurunsoft/chinese-util-cpphttps://github.com/Yurunsoft/ChineseUtil


imi 现在有了第一个成功案例展示:

教书先生API

项目介绍: 教书先生API是免费提供API数据接口调用服务平台 - 我们致力于为用户提供稳定、快速的免费API数据接口服务。

感言:

之前的话服务器配置是8H8G 30M这样的一个配置,每天日300万+的一个请求量,有一次是某个接口因一个错误时不时会导致服务器直接宕机,一个偶然的搜索看到了群主(宇润)大佬的一个IMI项目,于是熬夜给程序内部请求核心代码换上了IMI,正好手里面有一台1H2G 5M的服务器,拿来测试了一下,配合Redis 200万-300万+一点问题都没有的,最后还是要感谢宇润大佬的开源项目。


不论您使用 imi 开发的是个人项目还是公司项目,不管是开源还是商业,都可以向我们提交案例。

案例可能会被采纳并展示在 imi 官网、Swoole 官网等处,这对项目的推广和发展有着促进作用。

提交格式:

  • 项目名称
  • 项目介绍
  • 项目地址(官网/下载地址/Github等至少一项)
  • 联系方式(电话/邮箱/QQ/微信等至少一项)
  • 项目截图(可选)
  • 感言

imi 框架进阶教程(五子棋服务端开发,每周连载中)https://space.bilibili.com/768718/channel/detail?cid=136926

imi -

Published by Yurunsoft over 4 years ago

宇润有话说

imi 框架进阶教程(五子棋服务端开发,每周连载中)https://space.bilibili.com/768718/channel/detail?cid=136926

可能是世界上最一把梭的爬虫框架,宇润爬虫框架(Yurun Crawler) 今天发布啦:https://github.com/Yurunsoft/yurun-crawler

宇润爬虫框架(Yurun Crawler) 是一个低代码、高性能、分布式爬虫采集框架,这可能是最一把梭的爬虫框架。

Yurun Crawler 基于 imi 框架开发,运行在 Swoole 常驻内存的协程环境。

为什么会开发这个框架?遇上有爬虫相关需求,调研了一些市面上现有的 PHP 爬虫框架,甚至是其它语言的爬虫框架,功能都十分简陋,需要编写的重复代码极多,不够一把梭。

更新日志

增强

  • 支持清空定时任务

  • 更新开源协议到 Mulan PSL v2

优化

  • 优化代码兼容性

修复

  • 修复应用启动时连接分组有残留的问题

  • 修复非协程环境下使用请求上下文的问题 #62

  • 修复在不同协议的服务器中,向另一个服务器发送数据时,没有用对DataParser的问题

  • 修复配置 Swoole 的 enable_coroutine 选项后无法正常启动服务的问题

  • 修复批量执行SQL在PHP8下运行报“SQLSTATE[HY000]: General error”的问题

imi -

Published by Yurunsoft over 4 years ago

宇润有话说

imi 框架进阶教程(五子棋服务端开发,每周连载中)https://space.bilibili.com/768718/channel/detail?cid=136926

更新日志

增强

  • 增强系统环境的识别(Docker、WSL 识别)

image

image

  • 测试服务主机名支持环境变量配置

优化

  • 优化 HTTP 路由解析

修复

  • 修复 PHP 8 数据库操作问题

  • 修复路由中带有多个占位符时,方法参数为 null 的问题

  • 修复启动时环境检测不会中断执行的问题

imi -

Published by Yurunsoft over 4 years ago

宇润有话说

这个版本强烈建议更新!

imi 的 Redis 队列组件也正式发布啦!

代码地址:https://github.com/imiphp/imi-queue

文档地址:https://doc.imiphp.com/components/mq/redis.html

更新日志

增强

  • 新增支持定时任务可以在定时任务进程中执行了

  • 支持动态增加、移除定时任务

  • 增加使用注解增加定时任务的方法

  • 新增 Args::set() 方法

  • 新增 process/run 命令行

  • 新增设置异步信号监听方法,相比 Swoole 的监听,此方法支持触发多次事件

  • 新增支持生成模型的同时,备份表数据(默认不启用)

  • 新增数据库驱动支持批量执行SQL语句的方法

  • 新增模型的 convertListToArray() 静态方法

  • 新增模型的 convertToArray() 方法

优化

  • 非启动服务器的命令,现在不再输出 imi Logo 和环境信息

  • 优化定时任务首次执行判断逻辑,针对单个任务而非全局

  • 在子进程清理不可继承的信号监听

  • 增加 bin/imi 的可执行权限

  • 优化一些代码

修复

  • 修复模型生成工具、表生成工具,当使用的表名是关键字时,出现的 SQL 错误问题

  • 修复当生成模型时,不传 -prefix 参数会有警告的问题

  • 修复部分场景出现进程无法正常结束的问题

  • 修复在子进程中,使用 exit 无法正确返回状态码的问题

  • 修复容器获取对象时,第一个参数为 null,会返回单例对象的问题

  • 修复 Bean 类的方法,返回值允许为 null,但返回 null 时会报错的问题

  • 修复在开启协程的工具中,使用 exit 无法正确返回状态码的问题

imi -

Published by Yurunsoft over 4 years ago

宇润有话说

最近忙于开发项目(后端都是基于 imi 的),疏于对 imi 的更新。

当然,这也侧面说明了现在的 imi 完全能够满足实际项目需求。

目前 imi v2 已经在规划设计中(文件夹建好了),和 v1 版本不会有太大的出入,但不兼容的地方肯定是有的。

届时会将 imi v1 中一些不合理的地方优化掉,增加一些新特性。

本周末会发布imi进阶实战教程的预告视频,实战教程代码也将全部同步开源,敬请期待!

更新日志

增强

  • 新增 ConnectContext::bindNx()

  • 新增支持 Swoole MySQL 驱动

优化

  • 优化数据库资源类,去除没有意义的,在打开时检测连接状态

  • 优化热更新进程与生成运行时进程通讯

  • 优化生成模型时,DDL SQL 过滤掉自增ID值

  • 优化数据库错误判断

  • 优化当使用 SWOOLE_BASE 模式时,不监听 start 事件

  • 优化代码

修复

  • 修复连接绑定器数据丢失问题

  • 修正字符串双引号改单引号

  • 修复启动命令在非项目根目录执行无效 #59

imi - 新增支持 Swagger API 文档生成

Published by Yurunsoft over 4 years ago

新增支持 Swagger API 文档生成

支持在项目中使用 Swagger 注解语法,运行命令,生成 Swagger 文件。

Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS)。

Swagger 可以贯穿于整个 API 生态,如 API 的设计、编写 API 文档、测试和部署。

Swagger 是一种通用的,和编程语言无关的 API 描述规范。

imi-apidoc 基于 zircote/swagger-php 开发,100% 支持写法。

Github: https://github.com/imiphp/imi-apidoc

文档地址:https://doc.imiphp.com/dev/generate/swagger.html

增强

  • 增强文件日志驱动,支持自动创建目录

  • 新增反射容器,更加高效地使用反射

  • 生成的模型类注释,现在会使用表注释

  • 生成模型工具的 prefix 参数现在支持传入多个前缀

优化

  • 优化 MemoryStream 从起始位读取剩余字符串的性能

  • 优化一些代码和写法

修复

  • 修复定时任务进程残留问题

  • 修复断开连接事件,在应用未初始化完毕时的问题

  • 修复注解切面的 allow 和 deny 指定多个时的判定问题

  • 修复子服务器配置 SSL 导致无法启动的问题

  • 修复特殊场景下,扫描注解出错,但不提示的问题

  • 修复部分情况下,模型生成表的问题

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 点击加群 贡献者