测量延迟

时间:2011-03-25 16:37:47

标签: java networking

我正在开发Java中的多人游戏项目,我正在努力改进收集延迟测量结果的方法。

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

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

4 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:3)

您还可以为游戏协议中使用的数据包加时间戳。因此,您将拥有更多数据来集成统计信息。 (此方法对于避免由额外的数据突发引起的开销也很有用。您只需使用已经交换的数据来执行统计数据)

您还可以开始使用其他指标(例如差异),以便更准确地估算您的连接质量。

答案 2 :(得分:0)

如果您尚未真正启动项目,请考虑使用像KryoNet这样的网络框架,它具有RMI和高效的序列化,并将使用UDP自动发送ping请求。您可以轻松获得ping时间值。

答案 3 :(得分:0)

如果您正在测量往返延迟,则时钟漂移,HW时钟精度和OS api等因素会影响您的测量。如果不花钱在硬件上,最接近的就是使用RDTSC指令。但是RDTSC没有自己的问题,你必须小心你的称呼。