假设我正在用golang编写一个REST web服务。在内部,我有几个会做事的工人。这种goroutine是根据需要由HTTP触发的。当然,我想以某种方式监控这些猩猩的进展。通常情况下,会有一个通道来发送更新、错误等等,主程序会在这些通道上执行select
。
但是,由于主程序的偶数循环忙于http.ListenAndServe()
,所以我无法找到实现这一目标的方法。鉴于这似乎是一个相当常见的问题,我想知道是否有一个设计模式,我错过了。
编辑一些更多的技术细节。因此,我有一个管理资源库的Resource
类。Resource.DoSomething()
是一个长时间的手术,所以它会踢在后面的一个戈鲁蒂。将打开一个通道,以便对状态进行轮询。
当某个HTTP请求传入时,将触发此DoSomething()
。但我没有任何背景资料来投票。目前,我的愚蠢计划是在下一个HTTP请求传入时轮询输入通道。这应该是充分的,但不是理想的-我想知道发生了什么在戈鲁蒂马上。
发布于 2014-09-18 09:42:16
启动一个Go例程,专门运行包含监视的select,将select放在它自己的for
循环中:
func main() {
go func() {
for {
select {
//TODO: Insert Code Here?
}
}
}()
err := http.ListenAndServe()
if err != nil {
//TODO:
}
}
https://stackoverflow.com/questions/25909065
复制相似问题