Go Flush() 不起作用

请检查这个要点并告诉我,出了什么问题?

为什么我看不到我的消息?

要点:https : //gist.github.com/cnaize/895f61b762a9f5ee074c


如果简单,我有两个功能:


func send(param martini.Params, r render.Render) {

    Ct.Msgs <- param["msg"]


    fmt.Printf("Sent: %v", param["msg"])


    r.JSON(http.StatusOK, Response{"status": "ok"})

}

和watch功能:


func watch(rw http.ResponseWriter, r render.Render) {

    var msg string

    ok := true

    for ok {

        select {

        case msg, ok = <-Ct.Msgs:

            rw.Write([]byte(msg))

            fmt.Printf("Wrote: %v", msg)

            f, ok := rw.(http.Flusher)

            if ok {

                f.Flush()

                fmt.Println("Flushed")

            } else {

                r.JSON(http.StatusOK, Response{"status": "error", "descr": "CANT_FLUSH"})

                return

            }

        }

    }


    r.JSON(http.StatusOK, Response{"status": "ok", "descr": "finished"})

}

为什么它不起作用?


编辑:


我已经更新了我的要点。现在在哪里:


if i, err := rw.Write([]byte(msg)); err != nil {

    r.JSON(http.StatusOK, Response{"status": "error", "descr": err.Error()})

    return

} else {

    fmt.Printf("i: %v", i)

}

我有日志:


 Sent: hello

 i: 5

 Wrote: hello

 Flushed

但我什么也没看到。


有什么想法吗?


米脂
浏览 352回答 1
1回答

芜湖不芜

冲洗工作。问题是 Chrome 的纯文本渲染器在显示任何内容之前等待完整的响应正文。强制内容类型为 html 以查看增量响应:func watch(rw http.ResponseWriter, r render.Render) {&nbsp; &nbsp; rw.Header().Set("Content-Type", "text/html")&nbsp; &nbsp; // same code as before}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go