Webman 框架入门

定位

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

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
小恐龙
花!
上一篇
下一篇