Go SSE 客户端的实现 请求携带payload 和认证信息

28 min read

要实现Go SSE客户端,可以使用go-sse库。要在请求中携带payload和认证信息,可以使用http.Request的Header和Body字段。

示例代码:

package main

import (
	"bytes"
	"fmt"
	"net/http"
	"time"

	"github.com/r3labs/sse/v2"
)

func main() {
	// 创建 SSE 客户端
	client := sse.NewClient("http://example.com/events")

	// 创建 http.Request
	req, err := http.NewRequest("GET", "http://example.com/events", bytes.NewBuffer([]byte("my payload")))
	if err != nil {
		panic(err)
	}

	// 设置请求头部,如认证信息
	req.Header.Set("Authorization", "Bearer my-token")

	// 监听 SSE 事件
	client.Subscribe("my-event", func(msg *sse.Event) {
		fmt.Printf("Received event: %v\n", msg.Data)
	})

	// 启动客户端
	if err := client.Open(req); err != nil {
		panic(err)
	}

	// 等待事件
	time.Sleep(time.Minute)
}

在上面的代码中,通过NewRequest函数创建了带有payload和认证信息的http.Request对象,并通过客户端的Open函数启动了SSE客户端。

注意,在订阅事件时,事件名称应该与服务器返回的事件名称匹配。如果服务器返回的事件名称是大写字母,而订阅的事件名称是小写字母,将无法接收到事件,需要保持一致。