Java 测量潜伏期

Java 测量潜伏期,java,networking,Java,Networking,我正在用Java开发一个多人游戏项目,并试图改进我收集延迟测量结果的方式 我当前的设置是定期发送一批UDP数据包,这些数据包由服务器加上时间戳并返回,然后计算并记录延迟。我采集了大量样本,然后计算出平均值,得到延迟 这似乎是计算客户端延迟的合理解决方案吗?我会让客户端给传出的数据包加上时间戳,并让响应保留原始时间戳。通过这种方式,您可以计算往返延迟,同时避免因服务器和客户端时钟不完全同步而导致的任何问题。您还可以为游戏协议中使用的数据包添加时间戳。因此,您将有更多的数据来整合您的统计数据。(此方

我正在用Java开发一个多人游戏项目,并试图改进我收集延迟测量结果的方式

我当前的设置是定期发送一批UDP数据包,这些数据包由服务器加上时间戳并返回,然后计算并记录延迟。我采集了大量样本,然后计算出平均值,得到延迟


这似乎是计算客户端延迟的合理解决方案吗?

我会让客户端给传出的数据包加上时间戳,并让响应保留原始时间戳。通过这种方式,您可以计算往返延迟,同时避免因服务器和客户端时钟不完全同步而导致的任何问题。

您还可以为游戏协议中使用的数据包添加时间戳。因此,您将有更多的数据来整合您的统计数据。(此方法也有助于避免额外数据突发造成的开销。您只需使用已交换的数据进行统计)


您也可以开始使用其他度量(例如方差)来对连接质量做出更准确的估计。

< P>如果您还没有真正开始项目,考虑使用一个网络框架,比如RMI和高效的序列化,它将使用UDP自动发送ping请求。您可以轻松获得ping时间值。

如果您正在测量往返延迟,时钟漂移、硬件时钟精度和操作系统api等因素将影响您的测量。如果不在硬件上花钱,最接近的方法就是使用RDTSC指令。但是RDTSC也有它自己的问题,你必须小心如何称呼它。

我假设你所有的通信都是使用UDP完成的。您好,详细,我喜欢这个想法,但我想问题是,每个数据包都需要一个响应,我猜流量会加倍?@TechyAdam:你收集的“时间戳”越多,你的数据更准确。当然,仅仅为了收集统计数据而发送大量未使用的数据包不是一个好主意。是的,当然,数据包需要立即响应才有用。无论如何,它可能只是一个发送回客户端的ack数据包,具有一个小维度,只包含时间戳、数据包序列号和少量类似的数据。@TechyAdam:但在回答您时,我认为您已经向客户端发送了某种UDP ack数据报,因为UDP不可靠,所以您至少需要一些ack来确保之前发送的数据包到达目的地。@0确实如此,但间隔时间一般。我喜欢这个想法,就像你说的,我会有更多的信息作为我的结果的基础。谢谢。从一方获取时间戳并将其时间戳与另一方的时间戳进行核对对我来说不太合适,因为很难同步两方的时钟。使用下面NPE的答案对我更有效。谢谢。时间同步正是我的问题。我的两个windows操作系统时钟与internet时钟同步,但由于某些原因,它们仍然关闭了约3秒,因此我无法真正找到单向延迟。你的方式很有魅力。