请检查这个要点并告诉我,怎么了? 为什么我看不到我的留言? 要点: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功能:
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
但是我什么也没看到。
有任何想法吗?
冲洗工作正常。问题是Chrome的纯文本呈现器在显示任何内容之前会等待完整的响应正文。强制将内容类型设置为html以查看增量响应:
func watch(rw http.ResponseWriter, r render.Render) { rw.Header().Set("Content-Type", "text/html") // same code as before }