Go语言如何做SSE推送_Go语言Server-Sent Events教程【技巧】

Go 的 http.ResponseWriter 实现 SSE 时需保持连接不关闭:设置正确响应头、使用 http.Flusher 显式刷新、监听上下文取消信号防 goroutine 泄漏,并严格遵循 SSE 协议格式发送消息。Go 的 http.ResponseWriter 怎么避免提前关闭连接Server-Sent Events 依赖长连接不中断,而 Go 默认的 HTTP handler 在函数返回时会隐式关闭响应体。一旦你写完数据就 return,连接立刻断开,客户端收不到后续事件。关键不是"怎么发",而是"怎么不让连接关":必须在 handler 函数内持续持有 http.ResponseWriter,不能让它被 GC 或作用域释放务必设置 Content-Type: text/event-stream 和 Cache-Control: no-cache,否则浏览器可能缓存或拒绝解析每次写入后调用 flusher.Flush() ------ 不是 w.Write() 就完事了;没 flush,数据卡在缓冲区,客户端永远等不到别用 log.Fatal 或 panic 中断 handler,会导致连接异常终止;用 return 前先 close channel、清理 goroutinefunc sseHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/event-stream") w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Connection", "keep-alive") flusher, ok := w.(http.Flusher) if !ok { http.Error(w, "streaming unsupported", http.StatusInternalServerError) return } // 后续写入 + flush...}用 net/http 实现 SSE 时如何安全推送消息直接往 ResponseWriter 写字符串容易出错:漏换行、格式错位、编码不一致,导致浏览器解析失败,表现为静默无事件或反复重连。SSE 协议对字段名和换行极其敏感,必须严格遵循 data: ... 或 event: xxx data: ... 格式:立即学习"go语言免费学习笔记(深入)";data: 行必须以 结尾,整个消息块以 结束(两个换行)如果 data 值含换行,需拆成多行 data:,每行一个;不能直接嵌 中文或 emoji 要确保响应头声明 charset=utf-8,否则可能乱码避免用 fmt.Fprintf 拼接,改用 io.WriteString + 显式 ,减少格式失控风险// 正确示例(发送 JSON 数据)msg := mapstringinterface{}{"id": 123, "msg": "hello"}b, _ := json.Marshal(msg)io.WriteString(w, "data: ")w.Write(b)io.WriteString(w, " ")flusher.Flush()goroutine 泄漏:为什么你的 SSE 服务跑几天就 OOM每个 SSE 连接对应一个长期运行的 goroutine,如果客户端断开但服务端没感知,goroutine 就卡在 write 或 time.Sleep 上,永不退出。 Mokker AI AI产品图添加背景

相关推荐
liwulin05067 分钟前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium
copyer_xyf9 分钟前
Agentic RAG 实战:PostgreSQL + LangGraph 一条链路
python·postgresql·agent
动力 continue16 分钟前
Python 元类与异常类:类的“制造工厂”与“报错定制师”
开发语言·python·制造
147API24 分钟前
Python批量生成蒸馏数据,并发、重试、幂等和断点续跑
开发语言·jvm·python
青 春 记 忆25 分钟前
零基础入门python04:用注册校验理解字典、集合和条件判断
开发语言·vscode·python·python3.11
kels889929 分钟前
实战排坑:黄金实时API开发,XAUUSD Tick报文异常处理实践
开发语言·python·websocket·网络协议·信息可视化
今天AI了吗32 分钟前
MCP 协议打通 AI 与国产数据库,SQL 调优全流程一站式闭环
数据库·人工智能·sql
FBI HackerHarry浩36 分钟前
Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数
开发语言·人工智能·python·pandas
高洁0143 分钟前
工信部教考中心证书-人工智能系列本系列
人工智能·python·深度学习·算法
灯澜忆梦1 小时前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化