Go 服务端 SSE 的代码示例

23 min read

下面是一个简单的 Go 服务端 SSE 的代码示例:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    http.HandleFunc("/stream", func(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")
        w.Header().Set("Access-Control-Allow-Origin", "*")

        for {
            fmt.Fprintf(w, "event: ping\n")
            fmt.Fprintf(w, "data: %v\n\n", time.Now().Format("2006-01-02 15:04:05"))

            time.Sleep(1 * time.Second)
        }
    })

    http.ListenAndServe(":8080", nil)
}

该示例使用 http.HandleFunc() 注册了一个名为 /stream 的路由,该路由返回 SSE 内容。在该函数中,我们使用 w.Header().Set() 方法设置 SSE 头信息。然后使用一个循环语句,每秒钟向客户端发送一条 SSE 数据。在该示例中,我们只发送当前时间,但您可以根据您的业务逻辑更改此处的代码。

最后,我们使用 http.ListenAndServe() 启动了 HTTP 服务器并始终监听请求。