Webman 框架入门

定位

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 怎么选

WebmanHyperf
底层Workerman(多进程 + 事件循环)Swoole(协程)
并发模型多进程,进程内同步单线程协程,IO 时让出
学习曲线平缓陡
性能高更高(IO 密集场景)
生态小中
数据库Eloquent(Laravel 系)协程化客户端(必须换)

简单判断:

  • 并发量在几百到几千 QPS → Webman 够用,且开发体验更接近传统 PHP
  • 需要上万 QPS、大量并发 IO → Hyperf

Webman 最大的优势是「迁移成本低」:不用改数据库客户端、不用理解协程、ORM 还是熟悉的 Eloquent。

延伸阅读

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇