使用 Fiber 的服务器发送事件
此示例演示了如何在 Fiber 应用中实现服务器发送事件 (SSE)。
描述
服务器发送事件 (SSE) 允许服务器通过单个 HTTP 连接向客户端推送更新。这对于需要服务器持续向客户端发送数据的实时应用非常有用,例如直播源、通知或实时图表。
先决条件
- Go 1.16 或更高版本
- Go 模块
设置
-
克隆仓库
git clone https://github.com/gofiber/recipes.git
cd recipes/sse -
安装依赖项
go mod tidy
运行应用
-
运行应用
go run main.go
-
服务器将在
http://localhost:3000
启动。
端点
- GET /: 索引页
- GET /sse: SSE 路由
- PUT /publish: 通过 SSE 发送消息
使用示例
默认情况下,示例将在端口 3000
运行;可以通过修改 main.go
中的 appPort
常量来更改。
- 打开浏览器并访问
http://localhost:3000
。 - 客户端将自动连接到 SSE 端点并开始接收来自服务器的更新。
/sse
端点将每两秒向客户端发布当前时间
自定义消息
要发送自定义消息,请向 /publish
端点发送 PUT
请求,使用以下 JSON 格式
{
"message": "Hello, World!"
}
发送到 /publish
端点的消息将添加到队列中,并按 FIFO 顺序读取。您可以使用迭代器中的 curl 进行测试
如果您使用 Bash 或 Zsh shell
for i in {1..10}; do
curl -X PUT -H 'Content-type: application/json' --data "{\"message\":\"SSE TEST $i\"}" http://localhost:3000/publish
done
如果您使用 fish
for i in (seq 1 10)
curl -X PUT -H 'Content-type: application/json' --data "{\"message\":\"SSE TEST $i\"}" http://localhost:3000/publish
end
发布后,您添加的消息将开始出现在 http://localhost:3000
的输出中。一旦队列为空且没有用户发布的消息剩余,/sse
将恢复显示当前时间的标准行为。
代码概览
main.go
主 Go 文件设置 Fiber 应用并处理 SSE 连接。它包含向客户端发送事件所需的配置。
附加信息
服务器发送事件 (SSE) 是一种允许服务器通过 HTTP 将数据推送到 Web 客户端的标准。与需要全双工连接的 WebSockets 不同,SSE 使用从服务器到客户端的单向连接。这使得 SSE 在只需服务器发送更新的场景中更易于实现且更高效。
有关 SSE 的更多信息,您可以参考以下资源