跳到主要内容

使用 Fiber 的服务器发送事件

Github StackBlitz

此示例演示了如何在 Fiber 应用中实现服务器发送事件 (SSE)。

描述

服务器发送事件 (SSE) 允许服务器通过单个 HTTP 连接向客户端推送更新。这对于需要服务器持续向客户端发送数据的实时应用非常有用,例如直播源、通知或实时图表。

先决条件

  • Go 1.16 或更高版本
  • Go 模块

设置

  1. 克隆仓库

    git clone https://github.com/gofiber/recipes.git
    cd recipes/sse
  2. 安装依赖项

    go mod tidy

运行应用

  1. 运行应用

    go run main.go
  2. 服务器将在 http://localhost:3000 启动。

端点

  • GET /: 索引页
  • GET /sse: SSE 路由
  • PUT /publish: 通过 SSE 发送消息

使用示例

默认情况下,示例将在端口 3000 运行;可以通过修改 main.go 中的 appPort 常量来更改。

  1. 打开浏览器并访问 http://localhost:3000
  2. 客户端将自动连接到 SSE 端点并开始接收来自服务器的更新。
  3. /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 的更多信息,您可以参考以下资源