1 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
你沒(méi)有錯(cuò),其實(shí)。這是 api 的預(yù)期功能EventSource,它總是觸發(fā)調(diào)用,除非它明確停止。檢查事件源 API
EventSource 接口是 Web 內(nèi)容與服務(wù)器發(fā)送事件的接口。EventSource 實(shí)例打開(kāi)與 HTTP 服務(wù)器的持久連接,該服務(wù)器以文本/事件流格式發(fā)送事件。連接保持打開(kāi)狀態(tài),直到通過(guò)調(diào)用 EventSource.close() 關(guān)閉。
因此,您需要在服務(wù)器完成發(fā)送數(shù)據(jù)時(shí)進(jìn)行更新,并讓客戶(hù)端知道流是否已停止。這是您的代碼中的示例:
main.go
go func() {
defer close(chanStream)
for i := 0; i < 5; i++ {
chanStream <- i
time.Sleep(time.Second * 1)
}
}()
c.Stream(func(w io.Writer) bool {
if msg, ok := <-chanStream; ok {
if msg < 4 {
c.SSEvent("message", msg)
} else {
c.SSEvent("message", "STOPPED")
}
return true
}
return false
})
公共.html
stream.addEventListener("message", function(e){
if (e.data === "STOPPED") {
console.log("STOP");
stream.close();
} else {
console.log(e.data);
}
});
- 1 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報(bào)