假设我正在用golang编写REST Web服务。在内部,我有几个执行程序的工作者goroutine。此类goroutine由HTTP API按需触发。当然,我想以某种方式监视这些goroutine的进度。通常,goroutine将有一个通道发送更新,错误等。主程序将select
在这些通道上运行。
但是,由于主程序的偶数循环忙于处理http.ListenAndServe()
,所以我看不到实现此目的的方法。考虑到这似乎是一个非常普遍的问题,我想知道是否缺少一种设计模式。
[编辑]一些技术细节。因此,我有一Resource
堂课来管理资源池。Resource.DoSomething()
这是一个很长的操作,所以它会在后台启动一个goroutine。将打开一个通道以允许轮询状态。
当某个HTTP请求进入时,DoSomething()
将触发该请求。但是我没有上下文可以从中查询状态。目前,我的愚蠢计划是在下一个 HTTP请求进入时轮询通道以进行输入。这应该足够但不理想-我想立即知道该goroutine中发生了什么。
启动一个 Go 例程来专门运行包含监控的 select,将 select 放入它自己的for
循环中:
func main() {
go func() {
for {
select {
//TODO: Insert Code Here?
}
}
}()
err := http.ListenAndServe()
if err != nil {
//TODO:
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1091 次 |
最近记录: |