2
我需要在我的golang應用中讀取sse,但不是實時的,事件返回緩衝。正如我所看到的,這是由於標準的golang傳輸。我怎樣才能解決這個問題,而無需實施我自己的交通工具 此代碼由cryptix溶液啓發:在客戶端讀取未緩存的服務器發送的事件
resp, _ := http.Get(sseURL)
events := make(chan Event)
wg:= sync.WaitGroup{}
wg.Add(1)
go func() {
event:= Event{}
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadBytes('\n')
if err != nil {
log.Println(os.Stderr, "error during resp.Body read:%s\n", err)
close(events)
}
json.Unmarshal(line,&event)
events<-event
}
wg.Done()
}()
go func(){
for ev:= range events {
log.Println(ev)
}
}()
wg.Wait()
由於客戶端的傳輸不應該有延遲。您是否通過觀看電線上的數據來驗證時機? (另外,如果你有換行符分隔的json,你可以直接使用'json.Decoder') – JimB
Thx,@JimB。是的,我驗證了數據是以curl實時發送的。 – hjortron
如果服務器刷新完整的json對象*和*換行符,此方法可正常工作。 (我看到的延遲小於1μs)。您確實需要修復像在封閉通道上發送的問題,以及需要Fprintf的Println,但這不會增加任何延遲。確保服務器準確地*發送您預期的數據。 – JimB