作者:风云变幻1892_602 | 来源:互联网 | 2022-12-02 17:00
我有一个包含10个服务器的列表,其中一个服务器是主服务器.它有责任向剩余的9台服务器发送请求,并且必须等待至少5台服务器的回复.我可以使用goroutine异步发送这些请求,一旦我收到其中至少5个的回复,我就可以继续执行了.一般来说,我如何使用go设计这个?随意使用您喜欢的任何工具.您可以假设这10个服务器是隔离的,并且它们之间没有任何共享.
1> Tim Cooper..:
由于您正在与远程服务器通信,因此context.Context
在完成10个请求中的5个请求后,取消该服务器可能是有意义的.您可以将该上下文传递给您正在使用的任何网络功能.
例如:
ctx, cancel := context.WithCancel(context.Background())
n := int32(10)
// Inside the goroutine
if atomic.AddInt32(&n, -1) == 5 {
cancel()
}
<-ctx.Done() // returns once the context is canceled