在Golang中运行后台任务和服务器监听的最佳实践是什么?
发布时间:2020-12-16 09:27:53 所属栏目:大数据 来源:网络整理
导读:我是Go的新手.假设我有一个服务器正在侦听HTTP请求,同时我需要检查Redis通知,以便我可以更新数据.以下是一个例子: func checkExpire() { for { switch msg := pubSubConn.Receive().(type) { case redis.Message: ... }}server.ListenAndServe() 将checkExp
我是Go的新手.假设我有一个服务器正在侦听HTTP请求,同时我需要检查Redis通知,以便我可以更新数据.以下是一个例子:
func checkExpire() { for { switch msg := pubSubConn.Receive().(type) { case redis.Message: ... } } server.ListenAndServe() 将checkExpire简单地放入goroutine是一个很好的解决方案吗? go func() { for { switch msg := pubSubConn.Receive().(type) { case redis.Message: ... } }() 解决方法
是的,请记住main也是goroutine,这是工作代码:
package main import ( "fmt" "net/http" "time" ) func handler(w http.ResponseWriter,r *http.Request) { fmt.Fprintf(w,"Hi there,I love %s!",r.URL.Path[1:]) } func checkExpire() { for { // do some job fmt.Println(time.Now().UTC()) time.Sleep(1000 * time.Millisecond) } } func main() { go checkExpire() http.HandleFunc("/",handler) // http://127.0.0.1:8080/Go http.ListenAndServe(":8080",nil) } 运行代码并打开您的browser. 永远不要使用Empty loop(for {})看: 空循环使用100%的CPU核心,根据您可能使用的用例等待某些操作: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |