SuperAPI AI 工具集

webman

编程与开发

查看项目

更新于 10-16 02:20

技能介绍

用途

本技能用于 webman 框架的开发辅助。webman 是一个基于 workerman 的高性能、常驻内存 PHP 框架。与 PHP-FPM(每次请求引导、响应后销毁)不同,编写正确的 webman 代码需要从理解常驻进程模型出发。

核心心智模型:常驻内存

启动后,worker 常驻内存并处理成千上万个请求。由此产生以下硬性规则:

  • 绝不使用 exit / die:它们会杀死整个 worker,并断开该进程上的所有连接。
  • 静态属性 / 全局变量会跨请求存活:上一个请求写入的数据可能“泄漏”到下一个请求。请求级数据应保存在局部变量、$request 属性,或在协程下使用 support\Context。
  • 单例在请求间共享:不要在单例上存储请求状态;只增不减的数组属性会造成内存泄漏。
  • 代码修改需要 reload/restart(php start.php reload)。在调试模式下,status / connections 有助于诊断问题。
  • 控制器默认每次请求新建(config/app.php 中 controller_reuse => false)。若启用复用,控制器属性也会跨请求存活。

项目结构

├── app/                  # 应用代码
│   ├── controller/       # 控制器(可选;可自由选择 MVC 或 DDD)
│   ├── model/            # 模型
│   ├── middleware/       # 中间件
│   └── functions.php     # 自定义辅助函数
├── config/               # 所有配置
│   ├── route.php         # 路由
│   ├── process.php       # 进程定义(HTTP、自定义、定时器)
│   ├── middleware.php    # 中间件注册
│   ├── database.php      # 数据库(illuminate/database)
│   ├── redis.php         # Redis
│   └── plugin/           # 插件配置
├── plugin/               # 应用插件
├── public/               # 静态资源(唯一可被 Web 访问的目录)
├── process/              # 自定义进程类
├── support/              # 框架桥接代码
└── start.php             # 入口文件

常用命令

composer create-project workerman/webman   # 创建项目

# Linux / macOS
php start.php start        # 前台运行(调试)
php start.php start -d     # 守护进程(生产)
php start.php reload       # 平滑重载(更新代码,保持连接)
php start.php restart -d   # 完全重启(修改 process.php、Timer 或常驻数据后必须执行)
php start.php stop
php start.php status       # 进程内存、请求计数
php start.php connections  # 连接信息

# Windows(不支持守护进程 / reload)
php windows.php

reload 与 restart 的区别:reload 只重载应用代码(app/ 及大部分 config/)。对 config/process.php 的修改,或在 onWorkerStart 中已创建的定时器/连接不会被重载——需使用 restart。

编码规范

  • PHP >= 8.0(webman v2 要求 8.1+);始终声明 declare(strict_types=1)。
  • 控制器签名:public function action(Request $request): Response,使用 support\Request。
  • 通过辅助函数(response()、json()、view()、redirect() 等)返回 Webman\Http\Response。不要使用 echo。
  • 优先使用 illuminate/database(Db::table() / 继承 support\Model 的 Eloquent 模型)。
  • 使用 config('app.debug') 读取配置;绝不 include 配置文件。
  • 使用 support\Log 记录日志(Log::info() / Log::channel('xx')->info()),不要使用 error_log 或 echo。

Do / Don't 速查表

Don't Do
用 exit() / die() 结束请求 return response(...) 或 throw
$_GET / $_POST / $_SESSION $request->get() / $request->post() / $request->session()
header() / setcookie() $response->header() / $response->cookie()
无界静态数组 有界缓存(LRU)或 Redis
在单例上存请求数据 局部变量 / support\Context(协程)
在应用代码中按请求创建定时器 在 config/process.php 中定义自定义进程
在协程下用静态变量存请求状态 support\Context::set() / get()

参考文档(按需阅读)

  • 路由、控制器、请求/响应 API:references/routing-controller.md
  • 中间件(洋葱模型、CORS、认证):references/middleware.md
  • 数据库、Redis、缓存、分页、事务:references/database-redis.md
  • 自定义进程、WebSocket/TCP、定时器:references/custom-process.md
  • 协程(webman v2)、Context、并发、连接池:references/coroutine.md
  • 生命周期、内存泄漏与预防:references/memory-lifecycle.md
  • 插件开发(库插件与应用插件):references/plugin.md

适用场景与限制

适用于基于 webman 框架的 PHP 应用开发,尤其是需要常驻内存模型、自定义进程、WebSocket/TCP、协程等能力的场景。使用时应遵循上述常驻内存规则与编码规范。关于收费、价格、平台支持范围等具体信息,资料中暂未提供。