我列出了10台服务器,其中一台是 primary 。它负责向其余9台服务器发送请求,并且必须等待至少5台服务器的答复。我可以使用goroutines异步发送这些请求,并且至少收到其中5个邮件的答复后,我就可以执行死刑了。一般来说,我该如何使用go设计它?随意使用任何您喜欢的工具。您可以假定这10台服务器是隔离的,并且它们之间没有共享。
答案 0 :(得分:5)
由于您正在与远程服务器通信,因此有一个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