猿问

在客户端读取未缓冲的服务器发送事件

我需要在我的 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()


慕斯709654
浏览 136回答 1
1回答

繁星coding

我发现,由于透明压缩,数据由 nginx 缓冲。因此,要立即获取数据,我们必须像这样禁用压缩:client := &http.Client{}transport := &http.Transport{}transport.DisableCompression = trueclient.Transport = transportreq, err := http.NewRequest("GET", essURL, nil)if err != nil {&nbsp; &nbsp; log.Fatal(err);}resp, _ := client.Do(req)reader := bufio.NewReader(resp.Body)for {&nbsp; &nbsp; line,_:=reader.ReadSlice('\n')&nbsp; &nbsp; log.Println(string(line))&nbsp; &nbsp; &nbsp; &nbsp;}
随时随地看视频慕课网APP

相关分类

Go
我要回答