OVERVIEW
vhttpd Overview
这页是面向官网和文档首页的总览页。
如果只想先回答 4 个问题:
vhttpd是什么?- 它支持哪些运行面?
- PHP worker 需要返回什么?
- 常用 data plane / admin plane path 有哪些?
先看这页就够了。
Product Definition
vhttpd 不是业务框架,也不只是一个给 PHP 跑页面的 HTTP server。
更准确地说,它是一个面向 PHP 应用的 runtime gateway:
- 终止 HTTP / WebSocket / stream 连接
- 调度外部 worker
- 承载 streaming / upstream execution / MCP runtime
- 暴露 runtime state 和 admin plane
一句话定义:
vhttpd= PHP 应用的 transport/runtime layer
Runtime Model
vhttpd 现在统一按两层语义理解:
1. Surface
一级概念只表达运行面:
httpstreamwebsocketmcpwebsocket_upstream
2. Surface-specific fields
二级概念表达具体怎么跑:
stream.strategydirectdispatchupstream_plan
stream.outputtextsse
websocket_upstream.providerfeishu
这套命名的意思是:
- Feishu 长连接接入是
websocket_upstream - Ollama 这类上游流执行是
stream + upstream_plan - MCP 保持独立一级 surface,不降成
stream的一个 provider
Capability Map
| Surface | Subtype | What it means |
|---|---|---|
http | - | 普通 request/response |
stream | direct | worker 直接持有流并输出 chunk |
stream | dispatch | vhttpd 持有下游连接,worker 处理 open/next/close |
stream | upstream_plan | worker 返回 plan,vhttpd 自己连接上游并出流 |
websocket | phase 1 / dispatch | websocket handler / websocket dispatch |
mcp | Streamable HTTP | POST /mcp、GET /mcp、DELETE /mcp |
websocket_upstream | provider=feishu | vhttpd 主动连上游 websocket provider 并接收入站事件 |
PHP Worker Bootstrap Keys
php-worker 当前识别的 bootstrap array key 是:
httpwebsocketstreammcpwebsocket_upstream
典型写法:
<?php
return [
'http' => $httpApp,
'websocket' => $websocketApp,
'stream' => $streamApp,
'mcp' => $mcpApp,
'websocket_upstream' => $upstreamApp,
];
如果直接返回一个 dispatchable object,PhpWorker\Server 也会识别:
- 扩展侧
VSlim\* - pure PHP package 侧
VPhp\VSlim\* - 带
VPhp\VHttpd\Attribute\Dispatchable的类
PHP Worker Request/Response Shapes
One-shot HTTP
普通 HTTP worker response 仍然是:
statusheadersbody
Stream
stream wire mode 统一是:
mode = stream
phase 1 direct stream:
strategy = directevent = start|chunk|error|end
phase 2 dispatch stream:
mode = streamstrategy = dispatch
phase 3 upstream plan:
mode = streamstrategy = upstream_plan
MCP
MCP worker request:
mode = mcp
WebSocket Upstream
websocket upstream worker request:
mode = websocket_upstreamprovider = feishu
更细的 wire contract 见:
Data Plane Paths
HTTP
普通 HTTP path 由应用自己定义。
比如:
//users/:id/api/chat
WebSocket
WebSocket upgrade path 也由应用自己定义。
常见示例是:
/ws
扩展侧通常通过:
VSlim\App::websocket('/ws', $handler)
来注册。
MCP
当前 vhttpd 内建 MCP Streamable HTTP path:
POST /mcpGET /mcpDELETE /mcp
Admin Plane Paths
Runtime summary
GET /admin/runtimeGET /admin/runtime/upstreamsGET /admin/runtime/websocketsGET /admin/runtime/mcp
Worker operations
GET /admin/workersGET /admin/statsPOST /admin/workers/restartPOST /admin/workers/restart/all
WebSocket upstream runtime
GET /admin/runtime/upstreams/websocketGET /admin/runtime/upstreams/websocket/eventsGET /admin/runtime/upstreams/websocket/activitiesPOST /admin/runtime/upstreams/websocket/sendPOST /admin/runtime/upstreams/websocket/fixture/emit
Feishu runtime
GET /admin/runtime/feishuGET /admin/runtime/feishu/chatsPOST /admin/runtime/feishu/messages
PHP Package Entry Points
如果你用 Composer package 而不是扩展直出类,当前主要入口是:
VPhp\VHttpd\ManagerVPhp\VHttpd\AdminClientVPhp\VHttpd\PhpWorker\ServerVPhp\VHttpd\PhpWorker\ClientVPhp\VHttpd\PhpWorker\StreamResponseVPhp\VSlim\WebSocket\AppVPhp\VSlim\Mcp\AppVPhp\VSlim\App\Feishu\BotAppVPhp\VSlim\Stream\Factory
更细的 package 角色拆分见:
Source Map
如果你要从源码理解 vhttpd,可以先记这张最小地图:
main.v- 顶层 ingress / 路由 / orchestration
worker_transport.v- worker frame / stream / websocket / mcp transport contract
stream_runtime.v- stream
direct/dispatch
- stream
upstream_runtime.v- stream
upstream_plan
- stream
websocket_runtime.v- websocket room / presence / hub
mcp_runtime.v- MCP Streamable HTTP runtime
websocket_upstream_runtime.v- outbound websocket upstream runtime
admin_runtime.v- runtime summary/admin plane
更完整的文件职责见:
Recommended Reading Order
官网或首次了解:
- 先看这页
- 再看 README.md
- 再看 RUNTIME_MODULE_MAP.md
stream / upstream:
MCP:
worker / transport: