Server-Sent Events (SSE) 是一种允许服务器向客户端推送实时更新的技术。在Go语言中,使用Gin框架可以很方便地实现SSE接口。
以下是一个使用Gin框架编写的简单SSE接口示例:
安装依赖
首先,确保你已经安装了Gin框架:
go get -u github.com/gin-gonic/gin
编写SSE接口
创建一个名为main.go
的文件,并添加以下代码:
package main
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
func sseHandler(c *gin.Context) {
c.Header("Content-Type", "text/event-stream")
c.Header("Cache-Control", "no-cache")
c.Header("Connection", "keep-alive")
for i := 0; ; i++ {
// 发送事件数据
data := fmt.Sprintf("data: %d - %s\n\n", i, time.Now().Format(time.RFC1123))
_, err := c.Writer.WriteString(data)
if err != nil {
c.Error(err)
return
}
// 刷新缓冲区,将数据发送到客户端
c.Writer.Flush()
// 每秒发送一次数据
time.Sleep(1 * time.Second)
}
}
func main() {
r := gin.Default()
r.GET("/sse", sseHandler)
r.Run(":8080")
}
运行代码
运行以下命令启动服务器:
go run main.go
测试SSE接口
你可以使用浏览器或工具(如curl
)来测试SSE接口。
使用浏览器
-
打开浏览器,访问
http://localhost:8080/sse
。 -
打开浏览器的开发者工具,查看网络请求,你应该能看到持续更新的SSE数据。
使用curl
在终端中运行以下命令:
curl -N http://localhost:8080/sse
你应该能看到每秒更新的数据。
解释
-
c.Header("Content-Type", "text/event-stream")
:设置响应头为text/event-stream
,这是SSE的标准MIME类型。 -
c.Header("Cache-Control", "no-cache")
:禁止缓存响应。 -
c.Header("Connection", "keep-alive")
:保持连接打开。 -
c.Writer.WriteString(data)
:向客户端发送事件数据。 -
c.Writer.Flush()
:刷新缓冲区,确保数据立即发送到客户端。 -
time.Sleep(1 * time.Second)
:每秒发送一次数据。
这个示例展示了如何使用Gin框架编写一个简单的SSE接口。你可以根据需要扩展这个示例,添加更多的功能和处理逻辑。