MixPHP 从 V2.1 起调整为单应用 (可配置多个模块),`/app/src` 目录内为同一个应用,由注册的命令引导启动不同目录的程序代码,同一个应用中依然包含以下程序模块: - Console:命令行开发、守护进程开发 - Api:API 应用开发 - Web:Web 应用开发 - WebSocket:WebSocket 应用开发 - Tcp:TCP 应用开发 - Udp:UDP 应用开发 - JsonRpc: JSON-RPC 微服务开发 - Grpc: gRPC 微服务开发 目录结构: ``` |-- LICENSE |-- README.md |-- app | |-- Api | |-- Common | |-- Console | |-- JsonRpc | |-- Grpc | |-- SyncInvoke | |-- Tcp | |-- Udp | |-- Web | |-- WebSocket | `-- functions.php |-- bin | `-- mix.php |-- composer.json |-- config |-- manifest | |-- beans | |-- commands | `-- manifest.php |-- public |-- runtime |-- vendor `-- views ``` ## 增加或修改功能模块 `app` 目录内的应用都可随意修改或增加,以 `API` 开发为例: >[success] 通常一个 API 应用对应一个子域名,如:api.test.com 对应 app/src/Api 。 ### 1. 建立应用目录 在 `app` 目录内建一个子目录,比如:`Foo`,然后将 `Api` 文件夹的全部文件复制过来。 ### 2. 修改类文件的命名空间 找到所有类文件,全部由 `App\Api` 修改为新的命名空间 `App\Foo`。 ### 3. 命令注册到 (manifest.php) 把新模块的服务启动命令注册到 `commands` 配置项中: ~~~ 'foo:start' => [ \App\Foo\Commands\StartCommand::class, 'description' => "Start service", 'options' => [ [['d', 'daemon'], 'description' => "Run in the background"], [['p', 'port'], 'description' => "Listen to the specified port"], ], ], ~~~ ### 4. 启动 指定配置启动服务: ``` $> php bin/mix.php foo:start ```