登录
首页 >  Golang >  Go问答

逐块读取来自套接字的分块HTTP响应的golang解析

来源:stackoverflow

时间:2024-03-25 21:00:36 204浏览 收藏

在处理从 HTTP 服务器读取的分块响应时,使用 `io.Copy` 会导致阻塞,因为它等待下一个块到达才返回。为了解决这个问题,建议使用 `resp.Body.Read(buf)` 来逐块读取数据。`buf` 应该是一个分配的字节片,并且足够大以避免块被截断。这种方法允许在块到达时立即读取它们,而无需等待下一个块。

问题内容

我的邮件目标是从连接到 http 服务器的 tcp 套接字读取数据,并解析 http 响应逐块(传输编码:分块)- 服务器在同一连接上每 30 秒发送一个块

我附上了我的代码。看起来 io.copy 读取了第一个块,然后在返回之前等待下一个块,所以它阻止了我。

如何在块到达时读取它们,而无需等待下一个块?

func readHttpChunk(server net.conn) {
    buf := bufio.NewReader(server)
    for {
        resp, err := http.ReadResponse(buf, nil)
        b := new(bytes.Buffer)
        io.Copy(b, resp.Body)
        fmt.Printf("Got me a chunk!")
    }
}

解决方案


不要使用 io.Copy,而是使用 resp.Body.Read(buf),其中 buf 是分配的字节片。使用足够大的缓冲区,以免块被截断。读取应该用一个块填充 buf

到这里,我们也就讲完了《逐块读取来自套接字的分块HTTP响应的golang解析》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>