定位
Webman 是建在 Workerman 之上的框架,补上了路由、中间件、ORM、模板这些框架该有的东西,同时保持「常驻内存 + 轻量」。
它想解决的是:想要 Workerman 的性能,但不想自己造框架。
安装
composer create-project workerman/webman webman-demo
cd webman-demo
php start.php start # 前台,调试用
php start.php start -d # 后台守护
目录结构
webman-demo/
├── app/
│ ├── controller/ # 控制器
│ ├── model/ # 模型
│ └── middleware.php # 中间件
├── config/ # 配置
│ ├── route.php # 路由
│ ├── database.php
│ ├── redis.php
│ └── process.php # 自定义进程
├── public/index.php
└── start.php # 入口
结构接近 ThinkPHP/Laravel,降低迁移成本。
最小示例
控制器
<?php
namespace appcontroller;
use supportRequest;
use supportResponse;
class UserController
{
public function index(Request $request): Response
{
return json(['users' => []]);
}
public function read(Request $request, $id): Response
{
return json(['id' => $id]);
}
}
路由
// config/route.php
use WebmanRoute;
Route::get('/users', [appcontrollerUserController::class, 'index']);
Route::get('/users/{id}', [appcontrollerUserController::class, 'read']);
Route::post('/users', [appcontrollerUserController::class, 'create']);
// 分组 + 中间件
Route::group('/api', function () {
Route::get('/users', [appcontrollerUserController::class, 'index']);
})->middleware([appmiddlewareAuth::class]);
// 自动路由(按目录结构映射,可以不开)
Route::disableDefaultRoute();
数据库
Webman 默认用 illuminate/database(就是 Laravel 的 Eloquent):
use supportModel;
class User extends Model
{
protected $table = 'user';
}
// 用法和 Laravel 一致
$users = User::where('status', 1)->get();
这是 Webman 最聪明的地方:直接用 Laravel 的 ORM,不用学新东西。
核心概念
1. 常驻内存的注意事项
和所有常驻内存框架一样:
- 全局变量、静态属性会在请求间残留
- 不能在协程/请求外持有
Request对象 - 改代码要
reload(php start.php reload,比restart平滑)
2. 自定义进程
这是 Workerman 的属性,Webman 保留了:
// config/process.php
return [
'task' => [
'handler' => appprocessTask::class,
'count' => 2,
],
];
可以用来跑队列消费者、定时任务、长连接服务。
3. 不用 Nginx 也能跑
Webman 自带 HTTP 服务,可以直接对外。生产环境建议还是前面挂 Nginx(处理静态文件、TLS、限流更成熟)。
常见坑
① 改代码不生效
常驻内存,改 PHP 文件后必须 php start.php reload。开发时可以开 config/server.php 的 debug + 文件监控(php start.php start 加 -d 之外的方式),但生产别开。
② Eloquent 在常驻内存下的连接池问题
Webman 对 Eloquent 做了连接复用。长事务、连接泄漏要注意,配置里可以设 pool 参数。
③ 生态比 Laravel 小
遇到问题可参考的资料远少于 Laravel/ThinkPHP。很多问题要自己读源码。
什么时候选它
- 想要常驻内存的性能收益,但不想承担 Hyperf 的协程复杂度
- 做 WebSocket、TCP 服务、内部 API 网关
- 团队熟悉 Laravel/ThinkPHP,想低门槛迁移
不选它的场景:需要极致并发(那时用 Hyperf/Swoole)、需要庞大生态、团队不愿意处理常驻内存的坑。
和 Hyperf 怎么选
| Webman | Hyperf | |
|---|---|---|
| 底层 | Workerman(多进程 + 事件循环) | Swoole(协程) |
| 并发模型 | 多进程,进程内同步 | 单线程协程,IO 时让出 |
| 学习曲线 | 平缓 | 陡 |
| 性能 | 高 | 更高(IO 密集场景) |
| 生态 | 小 | 中 |
| 数据库 | Eloquent(Laravel 系) | 协程化客户端(必须换) |
简单判断:
- 并发量在几百到几千 QPS → Webman 够用,且开发体验更接近传统 PHP
- 需要上万 QPS、大量并发 IO → Hyperf
Webman 最大的优势是「迁移成本低」:不用改数据库客户端、不用理解协程、ORM 还是熟悉的 Eloquent。