社区贡献指南
本文引用的文件
- README.md
- OVERVIEW.md
- vhttpd-binaries.yml
- sync-vphp-package.yml
目录
简介
本指南面向希望参与 vhttpd 项目的贡献者,涵盖问题报告、功能请求、新功能开发流程、文档与代码贡献步骤、行为准则与沟通规范、新贡献者入门资源,以及贡献认可与激励机制。目标是让不同背景的参与者都能高效、安全地做出贡献。
项目结构
仓库采用“源码 + 文档 + 示例 + 配置 + 工作流”的清晰分层: - src:核心运行时与协议处理模块(V 语言) - docs:架构与设计文档、运行手册、协议说明等 - examples:多语言应用示例与配置 - config:TOML 配置文件示例 - scripts:安装、打包、诊断脚本 - .github/workflows:CI/CD 构建与发布流水线 - php/package:PHP 侧包入口与测试
graph TB
A["根目录"] --> B["src<br/>核心运行时与协议处理"]
A --> C["docs<br/>架构与设计文档"]
A --> D["examples<br/>示例与应用"]
A --> E["config<br/>TOML 配置示例"]
A --> F["scripts<br/>安装/打包/诊断脚本"]
A --> G[".github/workflows<br/>CI/CD 流水线"]
A --> H["php/package<br/>PHP 包入口与测试"]
章节来源 - README.md:1-120 - OVERVIEW.md:1-60
核心组件
- 协议接入面:HTTP、WebSocket、Stream(SSE/text)、MCP Streamable HTTP
- 执行模型:逻辑执行器(php-worker、vjsx 内嵌),统一通过 executor 选择
- 运行时能力:上游流式执行、外部 worker 编排、内嵌 host 执行、worker 传输与池管理、可观测性与 admin 平面
- 关键路径:/admin/(运行时快照、worker 控制)、/gateway/(内置网关发送 API)、/mcp(MCP 传输)、/:path(数据面路由)
章节来源 - README.md:45-126 - README.md:698-730 - OVERVIEW.md:165-228
架构总览
下图展示了客户端到 vhttpd 运行时、执行器与外部 worker 的整体交互关系。
graph TB
Client["客户端 / 浏览器 / MCP 客户端"] --> Ingress["协议接入层<br/>HTTP / WebSocket / Stream"]
Ingress --> Main["main.v<br/>顶层路由与编排"]
Main --> Exec["逻辑执行器<br/>php / vjsx / 未来宿主"]
Main --> Transport["传输与帧编解码"]
Main --> Stream["流式处理<br/>direct / dispatch / upstream_plan"]
Main --> Ws["WebSocket 会话与房间"]
Main --> Mcp["MCP 会话与队列"]
Main --> Pool["Worker 池与生命周期"]
Main --> Admin["Admin 平面<br/>运行时快照与控制"]
Exec --> VjsxHost["vjsx 内嵌宿主"]
Exec --> PhpWorker["php-worker 进程"]
PhpWorker --> PhpApp["PHP 应用/框架"]
Upstream["上游流式 API<br/>Ollama / NDJSON / Token 流"] --> Stream
AdminClient["运维/调试客户端"] --> Admin
图表来源 - README.md:84-126
章节来源 - README.md:84-126
详细组件分析
问题报告与分类标准
- 报告渠道:使用 GitHub Issues 提交问题
- 建议包含信息:
- 环境信息:操作系统、vhttpd 版本、构建方式(本地或 CI 制品)
- 复现步骤:最小化配置与调用序列
- 期望与实际结果:包括错误码、日志片段、事件日志路径
- 相关路径:/admin/runtime、/admin/workers、/events/stream 等
- 分类标准:
- Bug:功能异常、崩溃、超时、错误码不符合预期
- 性能:吞吐下降、延迟升高、内存/CPU 异常
- 兼容性:平台、TLS/DB 驱动、PHP 版本差异
- 文档:缺失、过时、不准确
- 增强:新功能、体验优化、可观测性改进
章节来源 - README.md:698-730 - README.md:1009-1030 - README.md:1101-1115
功能请求流程
- 需求讨论:在 Issue 中描述背景、目标用户、收益与风险
- 方案设计:参考现有架构文档(如 OVERVIEW、RUNTIME_MODULE_MAP)评估影响面
- 实现步骤:先提供最小可行方案(MVP),再迭代完善
- 验收标准:明确接口契约、配置项、可观测指标与回归用例
章节来源 - OVERVIEW.md:1-60 - README.md:128-150
新功能开发参与方式
- 需求讨论:Issue 中定义范围与边界,确认是否属于 executor 或 surface 扩展
- 方案设计:遵循“veb 为 HTTP 事实来源”的设计原则,保持 vhttpd 薄层定位
- 实现步骤:
- 新增/修改 src 下对应模块(如 stream_runtime、upstream_runtime、websocket_runtime、mcp_runtime)
- 更新 TOML 配置与 CLI 参数(参见 README 中的多监听与站点 DSL)
- 补充示例与文档(examples、docs)
- 增加测试(单元测试、端到端)
- 评审与合并:PR 需通过 CI 构建与测试,确保二进制产物可用
章节来源 - README.md:152-174 - README.md:533-617 - OVERVIEW.md:272-296
文档贡献指南
- 文档结构:
- docs:架构、设计、运行手册、协议契约
- articles:教程与案例
- README:产品概览与快速上手
- 写作规范:
- 术语一致(surface、executor、upstream_plan、dispatch 等)
- 图示优先,配合流程图/时序图解释复杂流程
- 链接到具体源文件与行号,便于追溯
- 翻译流程:
- 以英文原文为准,中文译文保持术语对齐
- 变更通过 PR 同步,CI 仅校验构建与基本语法
章节来源 - OVERVIEW.md:297-320 - README.md:128-150
代码贡献步骤
- Fork 仓库并创建分支:基于 main 分支,按功能命名
- 本地构建与验证:
- 安装依赖:make deps-core / make deps-db / make deps-vjsx
- 构建:make vhttpd / make prod
- 运行与自检:./vhttpd --help;检查 /admin 与 /events/stream
- 提交代码:
- 小步提交,清晰的 commit message
- 附带必要测试与文档更新
- 发起 PR:
- 描述变更动机、影响面、测试覆盖
- 等待 CI 构建与测试通过
- 发布与制品:
- CI 构建 Linux/macOS 二进制并上传制品
- 支持 workflow_dispatch 手动触发
章节来源 - README.md:210-271 - README.md:279-346 - README.md:428-436 - vhttpd-binaries.yml:1-171
社区行为准则与沟通规范
- 尊重与包容:理性讨论,避免人身攻击
- 透明与协作:公开讨论、记录决策、引用依据
- 质量优先:代码可读性、可维护性、可测试性
- 安全合规:不泄露敏感信息,遵循最小权限原则
[本节为通用规范说明,无需列出具体文件来源]
新贡献者入门指导与资源
- 快速上手:
- 阅读 README 与 OVERVIEW,了解产品定位与运行面
- 使用示例配置启动服务,访问 /admin 查看运行时状态
- 学习顺序:
- 先看 OVERVIEW,再读 README,最后查阅 RUNTIME_MODULE_MAP
- 针对特定能力(stream/upstream/MCP/WebSocket)参考对应文档
- 常用命令与路径:
- 构建:make deps-core && make vhttpd
- 运行:./vhttpd --host 127.0.0.1 --port 18081
- 观察:GET /admin/runtime、GET /events/stream
章节来源 - OVERVIEW.md:297-320 - README.md:428-436 - README.md:698-730
贡献者认可与激励机制
- 认可方式:
- 合并 PR 后在变更日志或发布说明中致谢
- 对长期贡献者在里程碑公告中点名感谢
- 激励建议:
- 设立“月度贡献者”展示
- 对高质量文档与示例给予额外曝光
- 邀请活跃贡献者参与技术路线讨论
[本节为通用机制说明,无需列出具体文件来源]
依赖分析
- 构建与发布流水线:
- vhttpd-binaries.yml:跨平台构建、打包、上传制品
- sync-vphp-package.yml:将 php/package 子树同步至独立仓库
- 依赖要点:
- Linux/macOS 原生库(OpenSSL、MySQL/PostgreSQL、SQLite、Boehm GC)
- vjsx 模块与受管 QuickJS 源码准备
- V 编译器与工具链
flowchart TD
Start(["触发条件<br/>push/main 或 workflow_dispatch"]) --> Build["安装依赖与工具链"]
Build --> Test["运行快速测试"]
Test --> ProdBuild["构建生产二进制"]
ProdBuild --> Smoke["冒烟测试与帮助输出校验"]
Smoke --> Package["打包制品含 runtime/libs 与脚本"]
Package --> Upload["上传制品到 GitHub Actions"]
图表来源 - vhttpd-binaries.yml:1-171
章节来源 - vhttpd-binaries.yml:1-171 - sync-vphp-package.yml:1-48
性能考虑
- 流式处理:优先使用 stream direct/dispatch/upstream_plan 模式,减少缓冲与拷贝
- Worker 池:合理设置 pool_size、queue_capacity、read_timeout_ms,避免队列溢出与超时
- 可观测性:利用 /admin/runtime 与事件日志进行瓶颈定位
- 构建优化:prod 构建默认 warn 级别日志,可通过环境变量调整
章节来源 - README.md:191-209 - README.md:270-271 - OVERVIEW.md:229-252
故障排查指南
- 常见问题定位:
- 队列满:返回 503,x-vhttpd-error-class: worker_queue_full
- 队列超时:返回 504,x-vhttpd-error-class: worker_queue_timeout
- 未知选项:CLI 参数校验失败
- 调试手段:
- 访问 /admin/runtime 查看运行时快照
- 订阅 /events/stream 获取 SSE ping 事件
- 使用 /dispatch 调试桥接端点(查询 method/path)
- 检查 Feishu 活动与消息发送端点
章节来源 - OVERVIEW.md:229-252 - README.md:1101-1115 - README.md:1009-1030
结论
通过本指南,贡献者可快速理解 vhttpd 的定位与架构,掌握问题报告、功能请求、开发与文档贡献流程,并利用 CI 制品与可观测接口进行验证与排障。建议在贡献前充分阅读 OVERVIEW 与 README,并在 PR 中提供清晰的动机、设计与测试覆盖。
附录
- 推荐学习顺序:OVERVIEW → README → RUNTIME_MODULE_MAP
- 关键路径速查:/admin/、/gateway/、/mcp、/:path
- 构建与运行:make deps-* → make vhttpd/prod → ./vhttpd --help
章节来源 - OVERVIEW.md:297-320 - README.md:698-730 - README.md:210-271