在游戏(MMORPG)客户端和服务器之间同步时间/事件?

6

我目前正在从事Java服务器端和AS3客户端的工作。我想知道是否有一种银弹可以同步它们之间的时钟。由于变量延迟和变量时钟速度,似乎每个数据包都需要一个时间戳。

谢谢!


@Thomas 这对于系统时间来说很好 - 但这更多是事件同步和延迟的问题,需要避免客户端作弊或呈现[难以置信]不准确的信息等。 - user166390
在编程中,你需要同时进行服务器端和客户端的建模。限制客户端输入只能通过鼠标和键盘进行。由于时间精度无法达到100%,因此你需要进行估计并逐步进行纠正措施。 - dqhendricks
看起来你正在寻找一个基于客户端时间的作弊检测系统?如果在登录/初始化时比较服务器时间和客户端时间,并根据初始同步设置某个时间缓冲区之外发生的任何操作,则可以禁止这些操作。 - case2000
到目前为止,这两个之间的数据包通常是什么样子的?我认为你使用每个数据包上的时间戳是完全正确的 - 这让你可以检查给定顺序是否可能发生某个动作,以及事情发生的时间等。您还可以将数据包的时间戳与当前时间进行比较,以“快进”任何稍有延迟的信息到现在。 - Martin
2个回答

2

以下是我凭记忆提供的,没有任何代码。

  1. 在服务器和客户端中放置代码以发送和接收ping。
  2. 每次客户端连接时向服务器发送ping。
  3. 记录当前时间作为发送时间。
  4. 当客户端接收到ping时,记录接收时间。
  5. 通过将接收时间减去发送时间并除以2来获取时间延迟。
  6. 让服务器向客户端发送当前时间。
  7. 从步骤6中发送的时间中减去时间差。
  8. 将客户端时间设置为步骤6中的时间。

我不确定这是否能百分之百准确,但我希望这可以帮到你!


1
是的,我认为这是正确的方法。从概念上讲,您必须在每个客户端和服务器上存储时间戳。并通过了解时间偏移量来调整它们的时间。 - Vishwas

0

不,没有银弹。你必须自己创新。时间戳是个好主意。此外,尽量减少服务器上的计算量。不要模拟无关紧要的东西,只需要考虑可能会破坏游戏逻辑的事情。让客户端计算其余部分,只向订阅者广播结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接