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 - 新增支持 MQTT 服务开发和客户端调用

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

imi -

Published by Yurunsoft over 4 years ago

增强

  • 启动服务命令新增支持守护进程参数

  • 支持禁用 Session 的 Cookie 输出

  • 跨域中间件支持设定,当请求为 OPTIONS 时,是否中止后续中间件和路由逻辑

优化

  • 优化代码

  • 防御性编程

  • 优化连接上下文、分组的 Redis 驱动

  • 增加运行时目录写权限检测

  • 去除错误抑制

  • 调整 ArrayData 属性命名,避免冲突

  • 调整 LazyArrayObject 属性命名,避免冲突

  • Imi\Server\Session\Session 类使用门面实现 SessionManager 所有方法

  • 门面生成时将构造、析构方法去除

修复

  • 修复 WebSocket DataParser 配置不生效的问题
imi -

Published by Yurunsoft over 4 years ago

  • 修复一些问题
imi -

Published by Yurunsoft over 4 years ago

  • 新增通过模型生成表命令

  • 新增 DDL 注解,模型生成工具支持生成 DDL

  • 修复定时任务加锁问题

imi - 修复 Inotify 热更新问题

Published by Yurunsoft over 4 years ago

  • 修复 Inotify 热更新问题
imi - 雪花算法发号组件及其他优化更新

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

  • 修正一些注释

imi - WebSockset、TCP 长连接服务,重大开发体验提升

Published by Yurunsoft over 4 years ago

增强

  • 🚀新增服务器工具类 文档

  • 👍新增通道容器 文档

  • 封装统一的 PipeMessage 机制 文档

  • 新增一种按命名空间指定,模型生成工具生成目标的方式 文档

  • 新增使用标记获取连接编号、使用连接编号获取标记批量用法 文档

  • Redis 模型支持 hash_object 存储 文档

  • Redis 模型支持 hash 存储 文档

优化

  • 优化 DataParser

  • 所有需要设置 Redis 连接池名的地方,现在不设置时都可以使用默认连接池

  • 优化 Server 和 Port 代码

  • 优化 Facade 生成出来的代码

  • 更新 RedisHandler 方法提示

修复

  • 修复 Facade 实例化传参问题

  • 修复容器单例问题

  • 修复重连数据恢复一些问题

  • 修复 http2 连接分组释放

imi -

Published by Yurunsoft over 4 years ago

增强

  • 新增支持验证器的场景定义 #53

优化

  • 框架启动时,增加运行环境检查步骤

  • 优化一些代码

修复

  • 修复部分场景下的启动问题

  • 修复 Integer 验证注解 #53

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

imi - 新增断线重连特性

Published by Yurunsoft over 4 years ago

  • 连接分组支持恢复上下文时重新进入分组

  • 实现连接标记绑定,重连恢复上下文数据

  • Lock::getInstance() 新增支持指定锁id

断线重连特性介绍视频:https://www.bilibili.com/video/BV1GC4y1s7yf

imi -

Published by Yurunsoft over 4 years ago

Swoole 官方问答平台已经上线,有关 imi、Swoole 相关的问题,都可以去这边提问:https://wenda.swoole.com/

增强

  • 上传文件获取tmpFileName #50

优化

  • 模型生成中,将 double 改为 float,php 中没有 double 类型

修复

  • 修复 WebSocket 和 Http 共用端口时会有 notice 级别信息的问题

  • 修复 #51 定时任务分钟数、秒数设置超过59n会报错的问题

  • 修复一些问题

imi -

Published by Yurunsoft over 4 years ago

增强

  • 新增数据库查询器加锁操作

  • 支持在 WebSocket 服务器中处理 http 请求

修复

  • 修复 Redis 模型的 find/select 方法返回的对象,可能没有 key 的问题

  • 修复路由设定 domain 参数时,第二次访问有 warning 的问题

imi - 重磅推出 Partial 概念!!!

Published by Yurunsoft over 4 years ago

这两周依然远程办公,忙于各种项目。这周更新的 Partial 很强大实用,可以看下的。

imi 视频教程已更新到第九集《模型和ORM》:https://www.bilibili.com/video/av78158909/

更新内容

增强

  • 新增 Partial 概念 (文档)

  • 树形模型新增支持注解设定主键字段 (文档)

优化

  • 优化 Redis 连接池资源类

  • 优化 Redis 连接池密码判断,现在为空字符串时,不会尝试密码登录

  • 优化树形模型代码

  • 优化热更新进程逻辑

修复

  • 修复 Inotify 热更新目录不存在报错问题

Partial

imi 的 Partial 思想是从 C# 中借鉴而来。Partial 可以将一个类的部分,分成几个文件,分别书写。

截止目前最新的 PHP 7.4 版本,还未在语言层面上支持 Partial 特性。

但依赖于 imi 强大的容器对象,终于在 PHP 中实现了 Partial 特性。

使用非常简单,使用 trait 编写,加上 @Partial 注解,可以方便地注入。

Partial 使用场景

  • 多人协作开发,修改同一个类文件难免有冲突。如果事先定义好接口,将不同方法分配给几个人开发,每个人只需要在自己的文件中编写,不用担心冲突问题。

  • 类的方法特别多,并且无法很好地拆分。这时候分到几个文件中,会相对比较好维护一些。

  • 有一些类是通过工具生成的,如果我们在类里编写了自己的代码,又需要重新工具生成一些内容,这时候会覆盖我们编写的代码。使用 Partial 在另一个文件开发,不会被覆盖掉。

Partial 概念引入 imi 框架前,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

imi - 立春!春回大地,万物复苏!

Published by Yurunsoft over 4 years ago

增强

  • 新增 Imi::getNamespacePaths() 获取所有命名空间路径的可能性

  • 新增 File::absolute(),相比 realpath() 函数,在文件不存在时也可以有效

  • 支持加载项目命名空间映射为多个目录情况下的 .env 配置文件

  • 跨域中间件 OptionsMiddleware 支持多个 allowOrigin

优化

  • 优化命名空间指向多个目录的场景

修复

  • 修复随 Manager 启动进程别名问题

  • 修复协程上下文的响应代理类问题

imi - 新增本地连接上下文存储处理器

Published by Yurunsoft almost 5 years ago

准备欢度春节(划水),春节前最后一个版本,放完假恢复更新

  • 新增本地连接上下文存储处理器:ConnectContextLocal,可用于 SWOOLE_BASE 模式

  • 新增 ElasticSearch 文档

  • 尝试修复一个问题

  • 修复 DEPRECATED 提示

imi - 周常迭代

Published by Yurunsoft almost 5 years ago

  • 运行时目录路径默认识别失败时抛出异常提示

  • 增加 swoole.use_shortname 必须启用的检测,避免用户因使用友商框架导致无法正常启用 imi 又不明原因的问题

  • 新增 Db::transContext() 方法

  • 支持获取随服务启动的进程对象 #35

imi - 推出 JWT 组件一把梭

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 时的配置冲突问题

imi - 新增支持 AMQP 消息队列组件

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 时,返回值判断问题

imi - 提升 MacOS 及部分 Linux 发行版兼容性

Published by Yurunsoft almost 5 years ago

每周唠叨

本周主要做了一些兼容性优化工作,方便大家在各种系统中使用 imi 框架开发。

免费视频教程

【宇润】基于 PHP + Swoole 的 imi 框架新手入门课程 | 每周五更新 | 从秃头到满头秀发,让你有更多时间上班划水,脱单不再是梦

戳我免费看从秃头到满头秀发的 imi 框架教程👉https://www.bilibili.com/video/av78158909

已更新第 4 集,每周四晚上更新至少一集~

更新日志

增强

  • 新增支持限制日志的 trace 条目数量,默认为 -1 不限制。属性名:traceLimit

优化

  • 优化 MacOS 及部分 Linux 发行版兼容性

  • 调整 Cron 进程 sock 文件名

修复

  • 修复 Bean 类一些问题

  • 修复有时注解不生效问题

  • 修复异常无法记录问题

  • 修复 MacOS 系统无法使用热更新问题,采用 unix socket 通讯

  • 修复验证器注解 callable={@Inject("BeanName"), "methodName"} 无效问题

  • 修复在有些环境下,imi 命令行生成不正确的问题

imi - 日常迭代+放出 2 集视频教程

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() 方法 (文档)

修复

  • 连接池心跳调整只针对空闲资源进行操作,防止多个协程执行出现错误

  • 修复 CronProcessWarning 问题

  • 修正几处代码语义化问题

优化

  • 优化 Statement,只有当执行 insert、replace 语句时,才获取 lastInsertId

  • 注解处理类不再对非 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 点击加群 贡献者
Related Projects