imi是一款应用开发框架,通过这款软件就可以帮助用户创建新的应用程序,您可以使用内置的功能组件开发相关应用功能模块,提供MySQL 连接池 (主从+负载均衡)、超好用的 ORM (Db、Redis、Tree)等核心组件,无论是配置请求还是配置移动通信都可以在软件轻松开发对应的功能,软件基于PHP Swoole开发,如果你了解Swoole就可以快速使用imi创建新的开发项目,您可以为开发项目配置多个,可以建立多个子,也可以在软件创建Swoole Request 事件,可以创建请求上下文 RequestContext,如果你需要这款软件就可以下载使用!
imi软件功能
imi 框架——基于Swoole的PHP协程开发框架
高能,功能强大,运行稳定,开发方便
支持 Http、Http2、WebSocket、TCP、UDP、MQTT 等主流协议的服务开发
特别适合互联网微服务、即时通讯聊天im、物联网等场景!
常驻内存:作为 Swoole 框架,能够避免重复加载带来的能损耗,提升能
协程异步:提高对数据库查询等 I/O 密集型场景并发处理能力
毫秒级热更新重启:imi 拥有与传统 PHP 框架一样的开发效率,保存即看效果,开发体验与 fpm 无差别
imi软件特色
imi 框架功能组件
什么是最好的 Swoole 框架啊?当然是 imi !
Http Server
Http2 Server
Websocket Server
Tcp Server
Udp Server
MQTT Server
容器 (PSR-11)
Aop 注入
Http 中间件 (PSR-15)
MySQL 连接池(主从+负均)
Redis 连接池(负载均衡)
Db 连贯作
ORM 连贯作
MemoryTable Model
验证器 (Validation)
志 (PSR-3)
缓存 (PSR-16)
Redis 模型
Task 异步任务
进程/进程池
命令行开发辅助工具
注解和代码的毫秒级热更新
imi教程
开始一个新项目
项目初始化
创建 Http Server 项目:composer -pject imiphp/pject-http
创建 WebSocket Server 项目:composer -pject imiphp/pject-websocket
创建 TCP Server 项目:composer -pject imiphp/pject-tcp
创建 UDP Server 项目:composer -pject imiphp/pject-udp
创建 MQTT Server 项目:composer -pject imiphp/pject-mqtt
如何运行请看上面项目中的README.md
项目最终使用什么协议,和上面的命令行无绝对关系。命令行创建项目只是提供一个快捷途径,服务的通信协议,可以通过修改配置文件来更换。
流程说明
在 imi 框架中,一个项目分为一个主和多个子。
其中,主为必须,子为可选。子通过监听端口实现,一般不推荐开启过多的子。
你需要为框架、每个在其命名空间目录下都创建一个Main.php,并把类命名为Main
项目的Main必须继承ImiMainAppBaseMain类。
的Main必须继承ImiMainBaseMain类。
并且实现一个__init()方法:
你可以在里面做一些初始化的事情,不过大多数时候什么都不需要做。
进程名称管理
imi 为启动出来的进程统一管理了进程名,你可以在 @app.pcess 中自定义,其默认设置为:
错误转为异常捕获
imi 框架底层支持将错误转为异常,可以通过 try...catch 来捕获。
默认是不启用的,你可以通过配置来设定错误捕获的等级,并且启用它:
在 config.php 中的 beans 配置
ll 与 PHP 原生的 err_reporting() 函数参数一致。
抛出的异常类为 ErrException
子(单项目多端口多协议)
imi 原生支持一个项目,单次启动,监听多个端口多个协议。
比如你要做一个聊天系统,http 用于注册、登录、上传文件等等,WebSocket 用于即时通讯。
http 和 WebSocket 同时做在一个项目中,代码之间没有隔阂,可以方便地互相调用和复用。
子配置
项目配置文件:
子命名空间配置
在子命名空间所在目录,需要创建一个 Main.php 入口文件。
子配置文件
文件:config/config.php
只有在 beanScan 中配置,才可以被扫描到,注解才可以生效
内部进程间通讯
为了方便进程内部通讯,进行数据交换。imi v1.2.0 版本新增了内部进程间通讯封装。
使用 Swoole 提供的 sendMessage() 和 onPipeMessage 事件 实现。
在 onPipeMessage 事件中,收到指定结构的数据,就会触发相应事件。
我们只需要监听事件就行了。
介绍
数据结构
事件名称
IMI.PIPE_MESSAGE.动作名
代码示例
发送并监听
发送:
监听:
事件名称为:IMI.PIPE_MESSAGE.test
发送并获取返回数据
思路:
一般来讲,发送消息不像 http 请求,一定会有响应结果。
但有时候,我们需要获取返回数据。
办法很简单,比如:发送数据动作名为 testRequest,再定义一个 testResponse 动作监听用于接收数据即可。
再使用 Channel 起协程等待响应结果,完美!
发送请求并等待响应:
监听请求:
事件名称为:IMI.PIPE_MESSAGE.testRequest
监听响应:
事件名称为:IMI.PIPE_MESSAGE.testResponse
注入值注解
imi 中有一类注解,他们支持将值动态注入到注解属中,当调用获取注解属时,才实时计算并返回。
注解说明
@ConstValue
从常量中读取值
@ConfigValue
从配置中读取值
@Inject
对象注入,使用:App::getBean()
@RequestInject
对象注入,使用:RequestContext::getBean()
同@Inject
@Callback
回调注解
用法示例
@DbInject
注入数据库对象
@RedisInject
注入Redis对象
@PoolResource
注入连接池资源
近期热门