猿问

如何在 Go 中执行 HTTP 双工处理程序?

听说这里

一旦您在响应中写入任何内容,请求正文将被关闭,从而阻止您从中读取任何内容

如果这是真的,我如何编写一个合适的双工处理程序,它能够从请求正文中读取,进行某种转换,然后以流方式写入响应正文,就像人们在 node.js 中所做的那样?


白衣非少年
浏览 209回答 2
2回答

Qyouu

我最终设法用http.Hijacker.在发出请求并解析请求标头后,我可以从 读取*http.Request.Body,然后劫持连接并同时写入它,如下所示:hj, ok := w.(http.Hijacker)if !ok {    http.Error(w, "hijacking not supported", 500)    return}conn, bufrw, err := hj.Hijack()if err != nil {    http.Error(w, err.Error(), 500)    return}defer conn.Close()然后conn是 a net.Conn,它是到客户端的底层 TCP 连接,bufrw是 a *bufio.ReadWriter,并且要在不关闭正文的情况下编写响应,我所要做的就是_, err = bufrw.WriteString("HTTP/1.1 200 OK\n\n")_, err = bufrw.WriteString("this")_, err = bufrw.WriteString("is")_, err = bufrw.WriteString("the")_, err = bufrw.WriteString("response")_, err = bufrw.WriteString("body")然后我不确定这一点,但也许有人可以完成答案,偶尔将缓冲区刷新到连接中是个好主意err := bufrw.Flush()
随时随地看视频慕课网APP

相关分类

Go
我要回答