相关疑难解决方法(0)

在Golang中没有缓冲http.ResponseWritter

我正在Go中编写一个简单的Web应用程序,我希望将我的响应流式传输到客户端(即,在请求完全处理后,不会缓冲并以块的形式发送):

func handle(res http.ResponseWriter, req *http.Request) {
  fmt.Fprintf(res, "sending first line of data")
  sleep(10) //not real code
  fmt.Fprintf(res, "sending second line of data")
}
Run Code Online (Sandbox Code Playgroud)

从客户端的角度来看,这两行将同时发送.任何建议值得赞赏:)

@dystroy回答后编辑

在我亲自制作的每次写入后都可以刷新,但在我的用例中,这还不够:

cmd := exec.Command("a long command that outputs lots of lines")
cmd.Stdout = res //where res is a http.ResponseWritter
cmd.Stderr = res
err := cmd.Run()
Run Code Online (Sandbox Code Playgroud)

我希望我的输出cmd也被刷新.无论如何要"autoflush"ResponseWritter?

我在golang的邮件列表上找到了帮助.有两种方法可以实现这一点:使用允许接管HTTP的底层TCP连接的劫持程序,或者在写入和刷新的go例程中管道命令的stdout和stderr:

pipeReader, pipeWriter := io.Pipe()
cmd.Stdout = pipeWriter
cmd.Stderr = pipeWriter
go writeCmdOutput(res, pipeReader)
err := cmd.Run()
pipeWriter.Close()

//---------------------
func writeCmdOutput(res http.ResponseWriter, pipeReader …
Run Code Online (Sandbox Code Playgroud)

http flush stream go

35
推荐指数
1
解决办法
2万
查看次数

标签 统计

flush ×1

go ×1

http ×1

stream ×1