Mode d’emploi
- Copiez la commande et examinez le paquet avant de l’installer dans votre environnement agent.
- Consultez le document original pour les outils, identifiants et environnements requis.
- Décrivez les entrées et le livrable souhaité ; comparez la sortie aux sources.
npx skills add https://github.com/zjkal/webman-skill --skill webmanAvant de commencer
- L’installation n’inclut ni abonnement au modèle, ni quota API, ni accès aux fichiers.
- Étoiles et installations reflètent l’activité, pas un test indépendant de qualité ou de sécurité.
Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.
webman Framework Development
webman is a high-performance, long-lived in-memory PHP framework built on workerman. Unlike PHP-FPM (bootstrap per request, tear down after response), correct webman code starts from understanding the resident-process model.
Core Mental Model: Resident Memory
After startup, a worker stays in memory and handles thousands of requests. Hard rules that follow:
- Never `exit` / `die`: they kill the whole worker and drop every
connection on that process.
- Static properties / globals survive across requests: data written by the
previous request can "leak" into the next. Keep request-scoped data in local variables, $request attributes, or support\Context under coroutines.
- Singletons are shared across requests: do not store request state on
singletons; array properties that only grow are memory leaks.
- Code changes need reload/restart (
php start.php reload). In debug
mode, status / connections help diagnose issues.
- Controllers are new per request by default (
controller_reuse => false
in config/app.php). If reuse is enabled, controller properties also survive across requests.
Project Layout
├── app/ # Application code
│ ├── controller/ # Controllers (optional; MVC or DDD as you prefer)
│ ├── model/ # Models
│ ├── middleware/ # Middleware
│ └── functions.php # Custom helpers
├── config/ # All configuration
│ ├── route.php # Routes
│ ├── process.php # Process definitions (HTTP, custom, timers)
│ ├── middleware.php # Middleware registration
│ ├── database.php # Database (illuminate/database)
│ ├── redis.php # Redis
│ └── plugin/ # Plugin config
├── plugin/ # Application plugins
├── public/ # Static assets (only web-accessible directory)
├── process/ # Custom process classes
├── support/ # Framework bridge code
└── start.php # Entry pointCommon Commands
composer create-project workerman/webman # create project
# Linux / macOS
php start.php start # foreground (debug)
php start.php start -d # daemon (production)
php start.php reload # graceful reload (code updates, keep connections)
php start.php restart -d # full restart (required after process.php, Timer, or resident data changes)
php start.php stop
php start.php status # process memory, request counts
php start.php connections # connection info
# Windows (no daemon / reload)
php windows.phpreload vs restart: reload only reloads app code (app/ and most of config/). Changes to config/process.php or timers/connections already created in onWorkerStart are not reloaded — use restart.
Coding Conventions
- PHP >= 8.0 (webman v2 requires 8.1+); always
declare(strict_types=1). - Controller signatures:
public function action(Request $request): Response,
with support\Request.
- Return
Webman\Http\Responsevia helpers (response(),json(),view(),
redirect(), …). Do not echo.
- Prefer
illuminate/database(Db::table()/ Eloquent models extending
support\Model).
- Read config with
config('app.debug'); neverincludeconfig files. - Log with
support\Log(Log::info()/Log::channel('xx')->info()), not
error_log or echo.
Do / Don't Cheatsheet
| Don't | Do |
|---|---|
exit() / die() to end a request | return response(...) or throw |
$_GET / $_POST / $_SESSION | $request->get() / $request->post() / $request->session() |
header() / setcookie() | $response->header() / $response->cookie() |
| Unbounded static arrays | Bounded cache (LRU) or Redis |
| Request data on singletons | Locals / support\Context (coroutines) |
| Timers created per request in app code | Custom process in config/process.php |
| Static vars for request state under coroutines | support\Context::set() / get() |
References (read on demand)
- Routing, controllers, request/response APIs: references/routing-controller.md
- Middleware (onion model, CORS, auth): references/middleware.md
- Database, Redis, cache, pagination, transactions: references/database-redis.md
- Custom processes, WebSocket/TCP, timers: references/custom-process.md
- Coroutines (webman v2), Context, concurrency, pools: references/coroutine.md
- Lifecycle, memory leaks, prevention: references/memory-lifecycle.md
- Plugin development (library vs app plugins): references/plugin.md



