将值从流同时广播到两个网络目标的最佳方法是什么?这是简化的代码:
func main() {
resp, _ := http.Get("http://origin.com/image.jpeg")
var buf bytes.Buffer
// tee, when read, writes to &buf
respBodyTee := io.TeeReader(resp.Body, &buf)
sendToClient(respBodyTee)
uploadeToServer(&buf)
}
流不能读取两次,因此TeeReader用于填充&buf从中读取的任何内容respo.Body。
但是,函数 (sendToClient和uploadToServer) 将同步运行,而我希望它们同时工作。
我想到的解决方案是传递一个通道,sendToClient该通道将使用已发送到客户端的字节填充通道。后来uploadToServer从同一频道阅读。沿着这些思路:
func main() {
resp, _ := http.Get("http://origin.com/image.jpeg")
ch := make(chan byte)
go sendToClient(respBodyTee, ch) // pass 'ch' for writing and run in a goroutine
uploadeToServer(ch) // will read from 'ch' (synchronous)
}
我是 Go 新手,不确定上述方向是否正确。
开心每一天1111
相关分类