SSE 协议内容要求

SSE(Server-Sent Events)协议有以下一些主要要求:

  1. 服务器响应头设置:

    • Content-Type 必须设置为 text/event-stream ,以表明这是一个 SSE 流。
    • Cache-Control 通常设置为 no-cache ,防止浏览器缓存响应。
    • Connection 通常设置为 keep-alive ,以保持连接的持久性。
  2. 数据格式:

    • 以文本形式发送,每行代表一个字段或消息的一部分。
    • 常见的字段有 data 用于实际的数据内容,以 data: 开头,后面跟着数据,多行 data 会被视为同一消息的不同部分。
    • 可以使用 event 字段来指定事件类型。
    • 消息以空行 \n\n 分隔。
  3. 重连机制:

    • 客户端应该能够在连接意外中断时自动尝试重新连接。
  4. 字符编码:

    • 通常使用 UTF-8 编码。
  5. 消息顺序:

    • 服务器发送的消息应该按照发送的顺序被客户端接收和处理。

package main

import (
    "encoding/json"
    "fmt"
    "github.com/labstack/echo/v4"
    "time"
)

type User struct {
    Name string
    Age  int
}

func sendStructuredSSE(c echo.Context) error {
    c.Response().Header().Set("Content-Type", "text/event-stream")
    c.Response().Header().Set("Cache-Control", "no-cache")
    c.Response().Header().Set("Connection", "keep-alive")

    counter := 0
    for {
        user := User{
            Name: fmt.Sprintf("User %d", counter),
            Age:  counter + 20,
        }
        data, _ := json.Marshal(user)
        _, err := fmt.Fprintf(c.Response(), "data: %s\n\n", data)
        if err!= nil {
            return err
        }
        c.Response().Flush()
        counter++
        time.Sleep(2 * time.Second)
    }
}

func main() {
    e := echo.New()

    e.GET("/sse", sendStructuredSSE)

    e.Start(":8080")
}

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值