Documentation
¶
Index ¶
- type Client
- type ConnectOption
- type Event
- type Writer
- func (w *Writer) Flush()
- func (w *Writer) WriteComment(comment string) error
- func (w *Writer) WriteCommentAndFlush(comment string) error
- func (w *Writer) WriteData(payload any) error
- func (w *Writer) WriteDataAndFlush(payload any) error
- func (w *Writer) WriteDataLines(payload any) error
- func (w *Writer) WriteDataLinesAndFlush(payload any) error
- func (w *Writer) WriteDataWithID(payload any, id string) error
- func (w *Writer) WriteDataWithIDAndFlush(payload any, id string) error
- func (w *Writer) WriteEvent(event string, payload any, id string) error
- func (w *Writer) WriteEventAndFlush(event string, payload any, id string) error
- func (w *Writer) WriteID(id string) error
- func (w *Writer) WriteIDAndFlush(id string) error
- func (w *Writer) WriteRetry(ms int) error
- func (w *Writer) WriteRetryAndFlush(ms int) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client SSE 客户端
func NewSSEClient ¶
func NewSSEClient() *Client
type ConnectOption ¶
type ConnectOption func(*connectOption)
func WithBody ¶
func WithBody(body io.Reader) ConnectOption
func WithHeaders ¶
func WithHeaders(headers map[string]string) ConnectOption
func WithMethod ¶
func WithMethod(method string) ConnectOption
type Event ¶
type Event struct {
ID string // 来自 id: 行
Event string // 来自 event: 行;若缺失则默认为 "message";若payload含 event 字段则覆盖
Data json.RawMessage // 来自 data: 多行拼接后的完整JSON字符串
Retry int // 来自 retry: 行(毫秒)
}
Event 表示一个解析后的SSE事件 兼容:标准SSE与payload内含event的风格
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer 用于向客户端发送 Server-Sent Events(SSE)数据流。 封装了 http.ResponseWriter 与 http.Flusher,提供线程安全、带缓冲刷新、 符合 W3C SSE 规范的事件写入能力。
主要特性:
- 自动设置 SSE 所需的响应头(Content-Type: text/event-stream 等)。
- 提供多种写入方法:事件(event)、数据(data)、注释(comment)、 重连间隔(retry)、事件 ID(id)等,支持链式调用与立即刷新。
- 所有写入方法最终都会调用底层 ResponseWriter,并可通过 Flush() 立即 将缓冲数据推送到客户端,实现低延迟实时推送。
- 支持带 ID 的消息,用于客户端断线后通过 Last-Event-ID 恢复数据流。
- 支持多行 data 的规范拆分,确保 JSON 中的换行不会破坏 SSE 格式。
使用示例:
w, err := sse.NewSSEWriter(rw)
if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError)
return
}
defer w.Flush() // 确保最后残留数据立即推送
// 发送一个带事件名与 ID 的 JSON 消息
if err := w.WriteEvent("message", map[string]string{"msg": "hello"}, "1"); err != nil {
log.Printf("write event failed: %v", err)
return
}
// 立即刷新到客户端
w.Flush()
注意事项:
- 必须在响应开始前调用 NewSSEWriter,否则无法设置响应头。
- 写入完成后务必调用 Flush(),避免数据滞留在缓冲区。
- 若客户端不支持 Flusher,NewSSEWriter 会返回错误,需提前处理。
func NewSSEWriter ¶
func NewSSEWriter(w http.ResponseWriter) (*Writer, error)
NewSSEWriter 创建并初始化一个 SSE Writer 实例。 该函数会检查传入的 http.ResponseWriter 是否支持 http.Flusher 接口, 若不支持则返回错误;若支持,则设置 SSE 所需的响应头(如 Content-Type、Cache-Control 等), 并返回一个可用于向客户端推送 Server-Sent Events 的 Writer。
func (*Writer) Flush ¶
func (w *Writer) Flush()
Flush 刷新缓冲区,将所有待发送数据立即推送到客户端。 本方法应在每次写入完成后调用,确保客户端及时接收事件。
func (*Writer) WriteComment ¶
WriteComment 注释心跳或备注(SSE注释行),每条消息以空行结束
func (*Writer) WriteCommentAndFlush ¶
func (*Writer) WriteDataAndFlush ¶
func (*Writer) WriteDataLines ¶
WriteDataLines 写入多行data(当JSON包含换行时更规范)
func (*Writer) WriteDataLinesAndFlush ¶
func (*Writer) WriteDataWithID ¶
WriteDataWithID 仅写入data且可选id
func (*Writer) WriteDataWithIDAndFlush ¶
func (*Writer) WriteEvent ¶
WriteEvent 写入标准SSE事件
func (*Writer) WriteEventAndFlush ¶
func (*Writer) WriteIDAndFlush ¶
func (*Writer) WriteRetryAndFlush ¶
Click to show internal directories.
Click to hide internal directories.