定位
Webman 是建在 Workerman 之上的框架,补上了路由、中间件、ORM、模板这些框架该有的东西,同时保持「常驻内存 + 轻量」。
版本现状:当前稳定版是 webman-framework 2.2(2026-02 发布),要求 PHP >= 8.1,依赖 Workerman 5.1。2.2 的主要增量是支持注解路由、新增 webman/validation 验证器组件,以及 webman/console 命令行组件(提供 make:crud、make:process 等命令)。
它想解决的是:想要 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 app\controller;
use support\Request;
use support\Response;
class UserController
{
public function index(Request $request): Response
{
return json(['users' => []]);
}
public function read(Request $request, $id): Response
{
return json(['id' => $id]);
}
public function create(Request $request): Response
{
$data = $request->post();
// ...校验并写入
return json($data, 201);
}
}
路由
// config/route.php
use Webman\Route;
Route::get('/users', [app\controller\UserController::class, 'index']);
Route::get('/users/{id}', [app\controller\UserController::class, 'read']);
Route::post('/users', [app\controller\UserController::class, 'create']);
// 分组 + 中间件
Route::group('/api', function () {
Route::get('/users', [app\controller\UserController::class, 'index']);
})->middleware([app\middleware\Auth::class]);
// 自动路由(按目录结构映射,可以不开)
Route::disableDefaultRoute();
数据库
骨架默认不带 ORM。要用 Laravel 系的 Eloquent,得自己装 illuminate/database(或改用 think-orm),装完在 config/database.php 配好连接:
composer require illuminate/database
use support\Model;
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' => app\process\Task::class,
'count' => 2,
],
];
可以用来跑队列消费者、定时任务、长连接服务。
3. 不用 Nginx 也能跑
Webman 自带 HTTP 服务,可以直接对外。生产环境建议还是前面挂 Nginx(处理静态文件、TLS、限流更成熟)。
常见坑
① 改代码不生效
常驻内存,改 PHP 文件后用 php start.php reload 平滑生效(新增文件、改 composer 依赖这类改动要 restart)。开发时前台 php start.php start 跑,骨架自带的 monitor 进程检测到文件变动会自动 reload;生产用 start -d 守护,更新代码后执行 reload 即可。
② 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。
延伸阅读
- Hyperf 协程框架入门——Webman 与 Hyperf 同属协程框架
- Workerman 常驻内存编程——Workerman 更底层一些