
go SSE向前端推送消息
作者: boyyang
分类: 前端开发
发布: 2024-04-14 06:06:12
更新: 2025-03-23 12:00:22
浏览: 200
服务端推送除了webSocket之外,还可以使用SSE(Server-Send Events)。SSE基于HTTP协议,采用了HTTP长连接的方式。客户端正常http请求服务器,通过JavaScript的EventSource对象监听服务器发送的事件,并在收到更新时触发对应的事件处理器。服务器在响应头中设置Content-Type: text/event-stream,表示该响应为事件流。
- 安装库
go get gopkg.in/antage/eventsource.v1
- go后端代码
package main
import (
"fmt"
"gopkg.in/antage/eventsource.v1"
"net/http"
"time"
)
func main() {
es := eventsource.New(
eventsource.DefaultSettings(),
func(req *http.Request) [][]byte {
return [][]byte{
[]byte("X-Accel-Buffering: no"),
[]byte("Access-Control-Allow-Origin: *"),
}
},
)
defer es.Close()
http.Handle("/event", es)
go func() {
for {
es.SendEventMessage(fmt.Sprintf("data:%s", time.Now()), "event", "")
time.Sleep(time.Second * 2)
}
}()
err := http.ListenAndServe(":4000", nil)
if err != nil {
fmt.Println(err)
}
}
- 前端代码
const sse = new EventSource("http://localhost:4000/event")
sse.addEventListener('event', (e) => {
console.log(e)
})
sse.onopen = (e) => {
console.log('连接成功')
}