webman 不支持 websocket 与 http/2 混合运行,其 websocket 基于 http/1.1 upgrade 机制,需 nginx 正确透传 upgrade/connection 头;http/2 仅可用于独立 https 接口服务。

Webman 本身不原生支持 HTTP/2 协议,它底层依赖 Workerman,而 Workerman 自 4.0.23+ 版本起才通过 $worker->protocol = "Http2" 和 SSL 上下文配置实现有限的 HTTP/2 支持——但仅适用于纯 HTTP/2 服务(如 API 网关),**不适用于 WebSocket 场景**。你无法用 Webman 启动一个「同时跑 WebSocket + HTTP/2」的混合服务进程。
Webman 的 WebSocket 服务根本不用 HTTP/2
WebSocket 连接建立阶段走的是 HTTP/1.1 Upgrade 流程(Upgrade: websocket),握手成功后即切换为二进制帧通信,后续数据传输与 HTTP 协议无关。这意味着:
- 你不需要、也不应该给
websocket://地址配 HTTP/2;Nginx 反代时只需确保proxy_http_version 1.1和Upgrade/Connection头透传即可 - 试图在
Worker('websocket://0.0.0.0:2000')中设置$worker->protocol = "Http2"会直接报错或静默失效 - Webman 的 WebSocket 全双工能力来自 TCP 层的长连接 + Workerman 的事件循环,和 HTTP/2 的多路复用无任何关系
想让 Webman 项目用上 HTTP/2,只能走 HTTP 接口层
如果你真需要 HTTP/2(比如加速前端资源加载、提升 REST API 性能),必须单独启动一个 HTTP/2 服务进程,不能和 WebSocket 共用同一个 Worker 实例:
- 新建
http2.php入口文件,用 Workerman 原生方式启动:$context = [ 'ssl' => [ 'local_cert' => '/path/to/fullchain.pem', 'local_pk' => '/path/to/privkey.pem', 'verify_peer' => false ] ]; $worker = new Worker('https://0.0.0.0:443', $context); $worker->transport = 'ssl'; $worker->protocol = 'Http2'; // 关键:仅对 https:// 有效 $worker->onMessage = function($connection, $request) { // 手动处理路由、静态资源、JSON 响应等 $connection->send("HTTP/2 OK"); }; Worker::runAll(); - Webman 的 HTTP 路由(
app/controller)默认不兼容该模式,需自行封装 Request/Response 或改用Workerman\Protocols\Http - Webman 的中间件、Session、View 等机制在此模式下全部不可用
Nginx 反代 WebSocket 时,HTTP/2 配置是干扰项
很多用户在 Nginx 里给 WebSocket location 块加 http2 参数,结果连接直接失败。原因很直接:
- Nginx 的
listen 443 ssl http2是针对 **HTTP 请求** 的协议协商,WebSocket 握手请求虽是 HTTP 格式,但语义上不是 HTTP/2 的流(stream),而是独立的 Upgrade 升级通道 - WebSocket location 块中只要漏掉
proxy_set_header Connection "upgrade"或写成"Upgrade"(大小写错误),就会导致握手 400 或 502 - 若你已在 server 块启用了
http2,WebSocket 路径仍需用标准 HTTP/1.1 反代逻辑,否则 Nginx 会拒绝 Upgrade 请求
真正要关注的不是 HTTP/2,而是 WebSocket 连接的稳定性:SSL 证书是否被浏览器信任、Nginx 是否透传了原始 IP(proxy_set_header X-Real-IP $remote_addr)、客户端是否正确处理 onerror 重连。这些细节比强行套用 HTTP/2 更影响全双工体验。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











