# 4.1 結構概述
## app分支(示例業務代碼)
示例項目,使用msf構建業務應用的推薦方式,主要目錄結構為
```
.
├── README.md
├── app // PHP業務代碼
│?? ├── AppServer.php // 應用server類,可根據需求自定義
│?? ├── Controllers // 控制器類目錄
│?? ├── Lib // 特殊邏輯處理類目錄
│?? ├── Models // Model類目錄
│?? ├── Route // 特殊路由規則類目錄
│?? ├── Tasks // Task類目錄
│?? └── Views // 視圖文件目錄
├── build.sh // 構建腳本(拉取docker鏡像,啟動容器)
├── checkstyle.sh // 代碼檢查腳本
├── composer.json // composer包依賴配置文件
├── config // 配置目錄
│?? ├── check.php // 代碼檢查配置
│?? ├── server.php // 主配置文件(server服務相關)
│?? ├── constant.php // 業務常量定義文件
│?? ├── log.php // 全局日志配置
│?? ├── http.php // HTTP服務配置
│?? ├── params.php // 全局業務配置(和運行環境無關)
│?? ├── dev // 研發聯調環境特殊配置目錄
│?? ├── docker // docker環境特殊配置目錄
│?? ├── product // 生產環境特殊配置目錄
│?? ├── qa // QA環境特殊配置目錄
├── server.php // server啟動腳本
├── console.php // 命令行腳本
├── test // 單元測試目錄
└── www // server根目錄
└── index.html // 索引文件
```
## master分支(框架源代碼)
框架源碼,支持composer安裝,具有composer包管理的所有特性,僅為框架代碼,不包含任何業務邏輯,主要目錄結構為
```
.
├── Base // 核心
│?? ├── AOPFactory.php //切片類工廠
│?? ├── Child.php // 基類
│?? ├── Core.php // 內核基類
│?? ├── Input.php // 用戶輸入對象
│?? └── Output.php // 用戶輸出對象
│?? └── Pool.php // 通用對象池類
├── Client // 客戶端
│?? ├── ConcurrentClient.php // flex風格的并行請求
│?? ├── Http // HTTP客戶端
│?? │?? └── Client.php // HTTP客戶端實現
│?? └── RpcClient.php // RPC Client
├── Console // 命令行
│?? ├── Controller.php // 命令行控制器基類
│?? └── Request.php // 命令行請求對象
├── Controllers // Web控制器
│?? ├── Controller.php // web請求控制器基類
│?? ├── Monitor.php // 內存服務器運行狀態控制器
│?? ├── Rest.php // Restful風格的API控制器示例
│?? └── Rpc.php // 處理RPC請求控制器
├── Coroutine // 協程
│?? ├── Base.php // IO協程基類
│?? ├── CException.php // 協程異常
│?? ├── CNull.php // 協程NULL值
│?? ├── CTask.php // Task協程
│?? ├── Dns.php // DNS協程
│?? ├── Http.php // HTTP請求協程
│?? ├── IBase.php // IO協程接口類
│?? ├── MySql.php // MySQL協程
│?? ├── Redis.php // Redis協程
│?? ├── Scheduler.php // 協程調度器
│?? └── Task.php // 協程類
├── Helpers // 輔助工具
│?? ├── Common.php // 全局函數
│?? └── Context.php // 請求上下文
├── HttpServer.php // Http Sever類
├── Marco.php // 全局類常量
├── Models // 模型
│?? └── Model.php // 模型基類
├── MSFCli.php // Cli命令行
├── MSFServer.php // MSFServer服務類
├── Pack // 打包
│?? ├── IPack.php // 打包基類
│?? ├── JsonPack.php // Json
│?? ├── MsgPack.php // MsgPack
│?? └── SerializePack.php // Serialize
├── Pools // 連接池
│?? ├── AsynPoolManager.php // 連接池管理器
│?? ├── AsynPool.php // 連接池
│?? ├── CoroutineRedisProxy.php // Redis連接池的協程輔助類
│?? ├── IAsynPool.php // 連接池接口類
│?? ├── Miner.php // MySQL Query Builder
│?? ├── MysqlAsynPool.php // 異步MySQL連接池
│?? └── RedisAsynPool.php // 異步Redis連接池
├── Process // 用戶自定義進程
│?? ├── Config.php // 配置管理進程
│?? ├── Inotify.php // 文件監控進程
│?? ├── ProcessBase.php // 自定義進程基類
│?? └── Timer.php // 用戶自定義定時器進程
├── Proxy // 代理
│?? ├── IProxy.php // 代理接口
│?? ├── RedisProxyCluster.php // Redis分布式代理類
│?? ├── RedisProxyFactory.php // Redis代理工廠類
│?? └── RedisProxyMasterSlave.php // Redis主從代理類
├── Rest // Restful
│?? ├── Controller.php // Restful風格的API控制器基類
│?? └── Serializer.php // Restful相關分頁、序列化類
├── Route // 路由
│?? ├── IRoute.php // 路由接口類
│?? ├── NormalRoute.php // 通用路由類
│?? └── RestRoute.php // Rest路由類
├── Server.php // Server基類
├── Tasks // Task
│?? ├── MongoDbTask.php // MongoDB Task
│?? ├── Task.php // Task基類
│?? └── TaskProxy.php // Task Proxy
└── Views // 視圖
├── error_404.php
└── test.html
```
- 0 文檔說明
- 1 為什么研發新框架
- 1.1 傳統php-fpm工作模式的問題
- 1.2 壓測數據對比
- 1.3 小結
- 2 微服務框架研發概覽
- 2.1 通信框架技術選型
- 2.2 swoole
- 2.3 協程原理
- 2.4 異步、并發
- 2.5 小結
- 3 框架運行環境
- 3.1 環境變量
- 3.2 運行代碼
- 3.3 docker
- 3.4 小結
- 4 框架結構
- 4.1 結構概述
- 4.2 控制器
- 4.3 模型
- 4.4 視圖
- 4.5 同步任務
- 4.6 配置
- 4.7 路由
- 4.8 小結
- 5 框架組件
- 5.1 協程
- 5.2 類的加載
- 5.3 異步Http Client
- 5.4 請求上下文
- 5.5 連接池
- 5.6 對象池
- 5.7 RPC
- 5.8 公共庫
- 5.9 RESTful
- 5.10 多語言
- 5.11 雜項
- 5.12 小結
- 6 常見問題
- 7 附錄