You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:15:37