请检查一下这个要点并告诉我,出了什么问题?
为什么我看不到我的消息?
要点: 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"})
}
Run Code Online (Sandbox Code Playgroud)
及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"})
}
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用?
编辑:
我已经更新了我的要点。现在在哪里:
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)
}
Run Code Online (Sandbox Code Playgroud)
我在日志中有:
Sent: hello
i: 5
Wrote: hello
Flushed
Run Code Online (Sandbox Code Playgroud)
但我什么也没看到。
有任何想法吗?
冲洗正在工作。问题是 Chrome 的纯文本渲染器在显示任何内容之前会等待完整的响应正文。强制内容类型为 html 以查看增量响应:
func watch(rw http.ResponseWriter, r render.Render) {
rw.Header().Set("Content-Type", "text/html")
// same code as before
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |