web-applications - Go 实时应用程序大量写入 ResponseWriter

标签 web-applications go websocket webserver real-time

我有一个 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/

相关文章:

ruby-on-rails - 为什么 Rails 会为所有 Assets 提供 404 错误?

xml - Go xml解码

go - 如何简单测试文件的下载和上传?

Java Websockets - 被不同的选项搞糊涂了

c# - 池回收上的 ASP.NET Websocket 行为

angularjs - 如何将 AngularJS 与 xampp 一起使用但不使用 Node.js 进行服务器通信?

java - SetTwo 类路径 用于执行 Java 程序

转到文件下载器

socket.io 的 C 客户端

javascript - iOS Web 应用程序 - 仅在添加到主屏幕时显示内容?