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
注入連接池資源