我有一个 Web 应用程序需要不断写入(可能永远不会结束)http.ResponseWriter
,并将这些输出显示到 html 页面。它是这样的:
func handler(w http.ResponseWriter, req *http.Request) {
switch req.Method {
case "GET":
for {
fmt.Fprintln(w, "repeating...")
}
}
}
我觉得 HTML 输出跟不上速度。
如果我想继续在 http.ResponseWriter
上书写并尽可能快地实时显示在 HTML 上,实现此目标的最佳方法是什么?
谢谢,
最佳答案
默认http.ResponseWriter使用 bufio.ReadWriter对于底层连接,它缓冲所有写入。如果您希望尽快发送数据,则必须在每次写入后刷新缓冲区。
有一个http.Flusher net/http 中的此接口(interface)包,默认实现 http.ResponseWriter .
有了这个你可以重写你的例子如下:
func handler(w http.ResponseWriter, req *http.Request) {
switch req.Method {
case "GET":
for {
fmt.Fprintln(w, "repeating...")
if f, ok := w.(http.Flusher); ok {
f.Flush()
}
}
}
}
这将在每次写入后刷新内部缓冲区。
关于web-applications - Go 实时应用程序大量写入 ResponseWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449225/