WebSocket
WebSocket 要开 ws feature,代码全在 axum/src/extract/ws.rs。axum 在这里做的事很少:它自己完成 HTTP 那一侧的握手(检查请求头、算 Sec-WebSocket-Accept),把「等连接交出来」交给一个后台任务,帧的读写全部交给 tokio-tungstenite。连接怎么从 hyper 手里交出来,在 hyper 卷的 协议升级 一章。
- WebSocketUpgrade:提取时按顺序查方法和
Connection、Upgrade、Sec-WebSocket-Key、Sec-WebSocket-Version,失败回 405、400 或 426;on_upgrade先 spawn 一个等OnUpgrade的任务,再返回101;on_failed_upgrade什么时候会被调用、什么时候不会;Message与关闭握手;消息上限默认 64 MiB;HTTP/2 上的扩展 CONNECT 为什么要求路由用any;升级后的连接不受优雅停机管。
flowchart TB reqin["握手请求"] --> ext["WebSocketUpgrade 提取"] ext -->|"头不对"| rej["405 / 400 / 426"] ext --> onup["on_upgrade"] onup --> resp["101 或 HTTP/2 的 200"] onup --> task["spawn:等 OnUpgrade"] task --> wss["WebSocketStream"] wss --> cb["你的回调"]
💬 关联讨论
发起讨论加载中...