如何为实现actix_web::Responder的SSE广播函数添加自定义响应头?
为Actix-web SSE端点添加自定义响应头
要给你的SSE函数添加自定义响应头,只需将broadcaster.new_client()返回的流包装到HttpResponse构建器中,通过insert_header方法添加自定义头,再用streaming方法绑定SSE流即可。
修改后的代码如下:
use actix_web::{HttpResponse, HttpRequest, Data, Responder}; use std::collections::HashSet; #[get("/api/sse")] pub(super) async fn sse(req: HttpRequest, broadcaster: Data<Broadcaster>) -> impl Responder { let mut subscribed_events = HashSet::new(); let args = req.query_string().split("&"); for arg in args { match arg.split_once("=") { None => {} Some((k, v)) => { if k == "event" { subscribed_events.insert(v.to_string()); } } } } // 获取SSE客户端流 let client_stream = broadcaster.new_client(subscribed_events).await; // 构建响应并添加自定义头 HttpResponse::ok() // 添加自定义头示例1 .insert_header(("X-Custom-SSE-ID", "user-123")) // 添加自定义头示例2(比如禁用缓存) .insert_header(("Cache-Control", "no-cache, no-store")) // 将SSE流绑定到响应,维持长连接 .streaming(client_stream) }
关键说明:
HttpResponse::ok()初始化一个200 OK的响应构建器,你也可以根据需求使用其他状态码insert_header支持传入任意(头名称,头值)元组,可多次调用添加多个自定义头streaming方法是保持SSE连接持续开放的核心,它会将异步流逐步发送给客户端- 若需要覆盖默认的SSE头(比如
Content-Type),也可以用insert_header手动设置,不过通常Broadcaster会自动配置text/event-stream类型
内容的提问来源于stack exchange,提问作者vanthome
相关产品推荐
相关产品推荐

