为了账号安全,请及时绑定邮箱和手机立即绑定

在 ResponseWriter 上实时应用大量写入

在 ResponseWriter 上实时应用大量写入

Go
幕布斯7119047 2021-11-29 19:15:12
我有一个 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上书写和显示这些内容,那么实现这一目标的最佳方法是什么?
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

默认的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()

              }

          }

     }

}

这将在每次写入后刷新内部缓冲区。


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信