Skip to content

skynet开发mmo场景内心跳问题 #1810

Closed Answered by cloudwu
kaka5548 asked this question in Q&A
Discussion options

You must be logged in to vote

对于服务器来说,真实时间 walltime 是没有太大意义的。有意义的是事件的发生次序。
事件包括了业务本身产生的动作,以及玩家外部的输入。

鉴于外部输入必然有一定的网络延迟,你可以设置一个下限,比如 100ms ,即,即使玩家可以用少于 100ms 把消息发送到服务器,你也认为它至少要 100ms 。

然后,服务器要做的事情就是,把所有的事件打上时间戳,然后根据时间戳的次序依次处理这些事件,并不关心真正处理它们时的 walltime 。而超过 100ms 的事件都可以堆积在一起放在待处理集合中。

所以,服务器流程就是:

  1. 如果有 100ms 以内的事件发生,那么就按次序执行它们,直到这个队列为空。
  2. 对长期事件做排序,直到它们变成短期事件。
  3. 并不需要周期性的运行某个特定业务,需要的只是处理事件。

这个流程中并不需要太高频和太准确(符合 walltime)的 timer 支持。

Replies: 2 comments 2 replies

Comment options

You must be logged in to vote
2 replies
@Gowa2017
Comment options

@kaka5548
Comment options

Comment options

You must be logged in to vote
0 replies
Answer selected by kaka5548
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
4 participants