戈朗 : Running something every few seconds with Ticker

标签 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

循环似乎中断了?怎么了?

最佳答案

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

关于戈朗 : Running something every few seconds with Ticker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44539107/

相关文章:

go - Go 在 C++ 中相当于 assert() 是什么?

docker - 从 gRPC 服务器到 http 服务器的 http.Post() 在 docker-compose 设置上返回 EOF 错误

go - 在 Go 中,是否可以写入控制台并读回?

go - 如何使用 golang 在本地主机系统中创建临时目录

go - 在 Go 中获取系统文件夹路径?

go - 在远程机器上执行WQL查询

json - 如何创建一个将 json 字符串转换为 golang 结构的通用函数?

GoLang, "hash.Write", "write()"函数是从哪里来的?

unit-testing - 用于测试的库是否包含在最终构建中

file-io - 戈朗 : Why does the compress/gzip Read function not read file contents?