在 ResponseWriter 上实时应用大量写入

我有一个 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上书写和显示这些内容,那么实现这一目标的最佳方法是什么?


幕布斯7119047
浏览 152回答 1
1回答

慕容森

默认的http.ResponseWriter使用bufio.ReadWriter作为底层连接,它缓冲所有写入。如果您希望尽可能快地发送数据,则必须在每次写入后刷新缓冲区。在net/http包中有一个http.Flusher接口,由默认的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()              }          }     }}这将在每次写入后刷新内部缓冲区。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go