1 回答

TA貢獻1803條經(jīng)驗 獲得超3個贊
應(yīng)用程序必須以文本/事件流格式編寫響應(yīng):
fmt.Fprintf(w, "data: %s\n\n", <-p.logs)
還有其他問題。當(dāng)客戶端斷開連接或?qū)懭腠憫?yīng)時出現(xiàn)錯誤時,處理程序應(yīng)退出。處理程序應(yīng)在等待第一個事件之前刷新標(biāo)頭。這是更新后的代碼:
func (p *DataPasser) handleHello(w http.ResponseWriter, r *http.Request) {
setupCORS(w, r)
w.Header().Set("Content-Type", "text/event-stream")
flusher, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Internal error", 500)
return
}
flusher.Flush()
done := r.Context().Done()
defer fmt.Println("EXIT")
for {
select {
case <-done:
// the client disconnected
return
case m := <-p.logs:
if _, err := fmt.Fprintf(w, "data: %s\n\n", m); err != nil {
// Write to connection failed. Subsequent writes will probably fail.
return
}
flusher.Flush()
}
}
}
- 1 回答
- 0 關(guān)注
- 80 瀏覽
添加回答
舉報