BOYYANG/1/blog/雷电将军 原神 4K电脑壁纸_彼岸图网

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('连接成功')
    }


#go
#前端
#后端