Web applications 在ResponseWriter上执行实时应用程序大量写入

Web applications 在ResponseWriter上执行实时应用程序大量写入,web-applications,go,websocket,webserver,real-time,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...")

我有一个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上,那么实现这一点的最佳方法是什么

谢谢,

默认情况下,底层连接使用一个缓冲区,缓冲所有写操作。如果希望数据尽快发送,则必须在每次写入后刷新缓冲区

包中有一个接口,默认情况下实现

有了这一点,您可以将示例改写如下:

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()
              }
          }
     }
}
这将在每次写入后刷新内部缓冲区。

默认情况下,对基础连接使用一个缓冲区,用于缓冲所有写入。如果希望数据尽快发送,则必须在每次写入后刷新缓冲区

包中有一个接口,默认情况下实现

有了这一点,您可以将示例改写如下:

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()
              }
          }
     }
}

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

这可以通过或GOA(良好的ol'AJAX)实现。不管是哪种方式,您只需将新数据附加到旧的。stream可以通过http,但带浏览器的js无法处理http部分接收到的响应,因此websocket或反复发出http请求。这可以通过或GOA(良好的ol'AJAX)实现。无论哪种方式,您只需将新数据附加到旧的.stream中即可通过http,但带浏览器的js无法处理http部分接收到的响应,因此websocket或多次发出http请求。