Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在游戏(MMORPG)客户端和服务器之间同步时间/事件?_Java_Actionscript 3_Tcp_Client Server_Latency - Fatal编程技术网

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

Java 在游戏(MMORPG)客户端和服务器之间同步时间/事件?,java,actionscript-3,tcp,client-server,latency,Java,Actionscript 3,Tcp,Client Server,Latency,我目前正在使用Java服务器端和as3客户端。我想知道是否有一个银弹在那里同步他们之间的时钟。在可变延迟和可变时钟速度之间,似乎每个数据包都需要一个时间戳 谢谢 不,没有银弹。你必须即兴创作。时间戳是个好主意。 另外,尽量减少服务器上的计算量。不要模拟不相关的东西。只模拟你认为会破坏游戏逻辑的东西。让客户端计算其余的,只向你的订阅者广播结果。这是我不知道的,没有任何代码 将代码放入服务器和客户端以发送和接收ping 每次客户端连接时,从客户端向服务器发送ping 将当前时间记录为te发送时间 当

我目前正在使用Java服务器端和as3客户端。我想知道是否有一个银弹在那里同步他们之间的时钟。在可变延迟和可变时钟速度之间,似乎每个数据包都需要一个时间戳


谢谢

不,没有银弹。你必须即兴创作。时间戳是个好主意。
另外,尽量减少服务器上的计算量。不要模拟不相关的东西。只模拟你认为会破坏游戏逻辑的东西。让客户端计算其余的,只向你的订阅者广播结果。

这是我不知道的,没有任何代码

  • 将代码放入服务器和客户端以发送和接收ping
  • 每次客户端连接时,从客户端向服务器发送ping
  • 将当前时间记录为te发送时间
  • 当客户端接收到ping时,记录接收时的当前时间
  • 通过将接收时间减去发送时间得到时间延迟,然后将其除以2
  • 让服务器向客户端发送当前时间
  • 从服务器发送的时间中减去时间差
  • 将客户端时间设置为步骤6中的时间

  • 我不确定这是否能100%准确地工作,但我希望这能有所帮助

    @Thomas这对系统时间很好——但这更多的是一个事件同步和延迟的问题,并避免客户端欺骗或提供[难以置信的]不准确信息等。同时对服务器端和客户端进行建模。将客户端输入限制为鼠标和键盘的输入。你永远不可能100%准确地掌握时间,你必须做出估计并逐步采取纠正措施。你似乎在寻找一个基于客户端时间的作弊检测系统?如果您将服务器时间与登录/init时的客户端时间进行比较,并且基于初始同步,不允许在某个按时间顺序排列的缓冲区之外发生任何操作,该怎么办?到目前为止,这两者之间的数据包通常是什么样的?我认为你在每个数据包上使用时间戳是完全正确的——这可以让你检查在给定顺序的情况下是否可以采取行动,事情发生的时间等等。您还可以将数据包的时间戳与当前时间进行比较,以便“快进”到当前任何延迟一点的信息。是的,我认为,这是正确的方法。从概念上讲,您必须在每个客户机和服务器上存储时间戳。并通过知道时间偏移量来调整它们各自的时间。