Golang:使用Ticker每隔几秒运行一次

时间:2017-06-14 08:12:25

标签: go

我想每隔几秒运行一次(通过websocket更新客户端)。我想我应该使用time.Ticker。但是我该如何让它发挥作用?我有以下但它不起作用......

func main() {
    hub = NewAppSocketHub()

    ticker := time.NewTicker(time.Second)
    go func() {
        for {
            log.Printf("In loop")
            select {
            case <-ticker.C:
                log.Printf("Broadcasting to %d clients", len(hub.Clients))
                hub.Broadcast <- UpdatePayload{
                    InstanceID: "Test",
                    Status:     "running",
                }
            }
        }
        log.Printf("Out of loop")
    }()

    r := chi.NewRouter()
    r.Use(render.SetContentType(render.ContentTypeJSON))
    r.Use(Cors)

    r.Post("/auth/login", Login)
    r.HandleFunc("/ws", WebSocketEcho)
    // ...

    http.ListenAndServe(":9000", r)
    log.Printf("Ended...")
}

我认为您可以忽略NewAppSocketHub和其他应用特定的实施。我目前遇到的问题是

2017/06/14 16:08:05 In loop
2017/06/14 16:08:06 Broadcasting to 0 clients

似乎循环中断?怎么了?

1 个答案:

答案 0 :(得分:1)

鉴于它不知道hub的实现,向hub.Broadcast频道发送消息是阻塞的,因此如果没有人消费来自它的消息它会等待,阻止循环到继续。