news 2026/4/26 19:41:19

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 := map[string]interface{}{"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产品图添加背景

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 19:39:07

Fedora Media Writer:三步创建完美启动盘的终极指南

Fedora Media Writer:三步创建完美启动盘的终极指南 【免费下载链接】MediaWriter Fedora Media Writer - Write Fedora Images to Portable Media 项目地址: https://gitcode.com/gh_mirrors/me/MediaWriter Fedora Media Writer 是一款专为 Fedora 系统设计…

作者头像 李华
网站建设 2026/4/26 19:34:05

智能体开发实战:从标准化工具集成到生产部署全流程解析

1. 项目概述:一个面向智能体开发的集成式工作室最近在开源社区里,contains-studio/agents这个项目引起了我的注意。乍一看标题,你可能会觉得它又是一个平平无奇的“智能体”框架,但当你真正深入进去,会发现它更像是一个…

作者头像 李华
网站建设 2026/4/26 19:23:44

如何让AI成为你的游戏开发搭档:Godot-MCP完整指南

如何让AI成为你的游戏开发搭档:Godot-MCP完整指南 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 想象一下&…

作者头像 李华
网站建设 2026/4/26 19:19:19

Jasmine漫画浏览器完整指南:如何打造全平台无缝阅读体验

Jasmine漫画浏览器完整指南:如何打造全平台无缝阅读体验 【免费下载链接】jasmine A comic browser,support Android / iOS / MacOS / Windows / Linux. 项目地址: https://gitcode.com/gh_mirrors/jas/jasmine 在数字阅读时代,你是否…

作者头像 李华
网站建设 2026/4/26 19:18:00

星穹铁道抽卡数据分析终极指南:免费解锁您的完整抽卡历史

星穹铁道抽卡数据分析终极指南:免费解锁您的完整抽卡历史 【免费下载链接】star-rail-warp-export Honkai: Star Rail Warp History Exporter 项目地址: https://gitcode.com/gh_mirrors/st/star-rail-warp-export 还在为记不清自己抽了多少次卡而烦恼吗&…

作者头像 李华