本文目录导读:

一个标准的 PHP Swoole 项目需要根据业务场景(HTTP 服务、WebSocket、TCP/UDP 服务、微服务等)来组织,这里提供一个面向生产环境、基于 Hyperf(最流行的 Swoole 框架)风格的目录结构,以及一个轻量级原生 Swoole 的参考结构。
基于 Hyperf 框架(推荐生产环境)
Hyperf 是目前最完善的 Swoole 框架,自带协程、依赖注入、注解等功能,结构清晰,适合中大型项目。
project-root/
├── app/ # 应用核心目录(业务代码)
│ ├── Aspect/ # 面向切面编程(AOP)类,如日志、缓存切面
│ ├── Command/ # 自定义命令行脚本(php bin/hyperf.php test:demo)
│ ├── Constants/ # 常量定义类(如错误码)
│ ├── Controller/ # HTTP 控制器
│ │ ├── Admin/ # 后台模块
│ │ │ └── UserController.php
│ │ ├── Api/ # 对外 API 或移动端接口
│ │ │ └── IndexController.php
│ │ └── WebSocket/ # WebSocket 控制器
│ │ └── ChatController.php
│ ├── Exception/ # 自定义异常及处理类
│ │ └── Handler/
│ ├── JsonRpc/ # JSON-RPC 服务(微服务)控制器
│ ├── Listener/ # 监听器(如 Swoole 事件监听)
│ ├── Middleware/ # HTTP 中间件(如用户鉴权、跨域)
│ ├── Model/ # Eloquent ORM 模型
│ │ └── Entity/ # 数据表实体类
│ ├── Process/ # 自定义自定义进程(Swoole Process)
│ ├── Service/ # 服务层(处理核心业务逻辑)
│ │ └── UserService.php
│ └── Task/ # 任务队列处理类(投递异步任务)
├── config/ # 应用配置目录
│ ├── autoload/ # Hyperf 自动扫描的配置文件
│ │ ├── dependencies.php # 依赖注入映射
│ │ ├── exceptions.php # 异常处理映射
│ │ ├── middlewares.php # 全局、模块中间件
│ │ ├── processes.php # 自定义进程注册
│ │ └── server.php # Swoole Server 端口及协议配置
│ ├── config.php # 基础配置(环境变量读取)
│ ├── container.php # 依赖注入容器定义
│ └── routes.php # 路由定义文件(HTTP 路由)
├── migrations/ # 数据库迁移文件(如 Phinx)
├── storage/ # 运行时文件
│ ├── logs/ # 日志文件存储
│ ├── cache/ # 缓存文件
│ └── upload/ # 上传文件目录
├── test/ # 单元测试和集成测试
├── bin/ # 可执行脚本
│ └── hyperf.php # 命令行启动脚本(启动:php bin/hyperf.php start)
├── composer.json # 依赖管理
├── .env # 环境配置文件
└── deploy/ # Docker 及部署相关文件
特点:
- 强约定:路由、控制器、中间件有固定位置,团队协作成本低。
- 注解丰富:支持
@RequestMapping、@Inject等,代码整洁。 - 协程安全:内置连接池(数据库、Redis)。
轻量级原生 Swoole 结构(适合小型项目或学习)
不引入重型框架,自行管理 Swoole 常驻内存及生命周期,适合对性能要求极高、只想用 Swoole 特性(异步任务、WebSocket)的项目。
project-root/
├── app/
│ ├── Controllers/ # 业务逻辑(控制器)
│ │ └── UserController.php
│ ├── Services/ # 业务服务层
│ │ └── UserService.php
│ ├── Models/ # 数据库模型(如 Medoo / Eloquent)
│ │ └── User.php
│ ├── Core/ # 核心基础组件
│ │ ├── Application.php # 应用主核心(解析路由、分发请求)
│ │ ├── Container.php # 简易 依赖注入容器(辅助)
│ │ ├── Router.php # 简单路由解析器
│ │ └── HttpServer.php # 封装 Swoole HttpServer 启动类
├── config/ # 配置目录
│ ├── server.php # Swoole 配置(worker_num、监听端口、task_worker)
│ ├── database.php # MySQL/Redis 配置
│ └── app.php # 应用配置
├── public/ # Web 根目录(静态资源、入口)
│ └── index.php # (仅用于 PHP-FPM 模式调试,Swoole 模式可不经过)
├── runtime/ # 运行时缓存与日志
│ ├── logs/
│ └── cache/
├── bin/
│ └── server.php # CLI 入口(启动/停止 Swoole:php bin/server.php start)
├── vendor/ # composer 依赖
└── composer.json
核心入口(bin/server.php)示例逻辑:
use Swoole\Http\Server;
// 加载配置...
$server = new Server('0.0.0.0', 9501);
$server->set([
'worker_num' => 4, // 业务进程
'task_worker_num' => 2, // 异步任务进程
'enable_coroutine' => true, // 开启协程
]);
$server->on('request', function ($request, $response) {
// 简单的路由分发
$router = new Router();
$handler = $router->dispatch($request->server['request_uri']);
// 调用控制器并输出
});
$server->on('task', ...); // 处理异步任务
$server->start();
关键目录与文件解析(基于 Hyperf)
config/autoload/server.php:这里定义了 Swoole 的Server监听,你可以配置 HTTP 服务(端口 9501)和 WebSocket 服务(端口 9502),以及mode、sock_type。app/Controller:控制器直接接收Psr\Http\Message\ServerRequestInterface。#[Controller(prefix: "/user")] class UserController { #[GetMapping("/info")] public function info(int $id) { // Swoole 下,这里可以直接使用协程 MySQL 查询,不会阻塞。 return $this->userService->getInfo($id); } }app/Task:Swoole 传统的task投递逻辑,如果使用 Hyperf,通常使用AsyncQueue组件替代,但 Task 仍存在。config/routes.php:如果不想用注解路由,可以在这里集中管理路由规则。
骨架安装命令
如果你从零开始,建议先装好骨架再修改:
# 安装 Hyperf 骨架(自动生成上述结构) composer create-project hyperf/hyperf-skeleton my-project cd my-project cp .env.example .env composer install # 启动 Swoole 服务 php bin/hyperf.php start
重要注意事项
- 常驻内存:Swoole Worker 进程常驻,这意味着你需要避免使用全局变量存储请求数据(会串数据),项目结构中一定要有清晰的
Context(上下文)管理类,或使用协程安全容器。 - 连接池:数据库和 Redis 连接必须使用连接池(Hyperf 自带),否则在协程下会耗尽连接。
- 日志:使用
Writer类或Monolog将日志写入storage/logs/,不建议使用echo输出到终端。 - 进程管理:Swoole 的
Task和Process需要单独配置,确保config中有对应定义,不能直接在控制器里new Process,需要注册到server.php配置中。
- 如果是正式项目,建议使用 方案一(Hyperf 骨架),因为其组件化、协程安全和团队协作规范。
- 如果是快速原型或对体积极度敏感,可以使用 方案二(原生结构),但需要自己处理协程安全、路由和中间件逻辑。
直接把代码放入上述结构对应的目录,然后通过 Composer 的自动加载实现类映射即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播