name5566 / leaf

A game server framework in Go (golang)
Apache License 2.0
5.3k stars 1.32k forks source link

在game模块下建一个倒计时的死循环,会导致该模块不能接受消息? #128

Closed Victoryship closed 6 years ago

Victoryship commented 6 years ago

image 如图中,在game模块下的heart.go初始化一个死循环。 image 然后xian向该模块的handlerBattle.go接受客户端请求。 image 发现game模块不会接收消息。一直卡在这边。如果把heart.go的死循环放到新模块,则可以正常收到。但是现在怎么把heart.go保留在game模块下

name5566 commented 6 years ago

去掉 for 死循环。

Victoryship commented 6 years ago

可是我需要这个for死循环来做不断循环的计时器。来重新开始每局游戏

Victoryship commented 6 years ago

是因为死循环的原因导致leaf不能接受客户端的消息吗?

name5566 commented 6 years ago

你可能是这个想法:https://github.com/name5566/leaf/issues/28#issuecomment-270056128

Victoryship commented 6 years ago

额,不是,就是我for里面有个c := time.Tick(1 time.Second) <-c。倒计时的功能。这里面计时完了。需要立即重新一轮。我也试过用skeleton.AfterFunc(time.secondtime.Duration(0),for循环)来做。还是一样。 是因为这个死循环会导致这个模块一直执行这个操作。而不能去接收通模块的其他的消息了么

name5566 commented 6 years ago

我发的这个就是按一个固定时间周期一直循环啊。

Victoryship commented 6 years ago

嗯嗯,那再问下skeleton.AfterFunc(time.second*time.Duration(15),func())这个能在func里获取到当前这个计时器跑了几秒和剩余几秒吗?

name5566 commented 6 years ago

过正好 15 秒的时候,func 被执行,也就是 func 执行的时候,正好 15 秒。当然,如果你需要更加精确,你可以自己记录一下,因为 func 被执行可能是 15.0001 秒,也可能是 15.1 秒。

Victoryship commented 6 years ago

嗯嗯,谢谢大佬。我在研究下