我正在开发Java中的多人游戏项目,我正在努力改进收集延迟测量结果的方法。
我目前的设置是定期发送一批UDP数据包,这些数据包由服务器加上时间戳并返回,然后计算并记录延迟。我拿出一些样本然后算出平均值以获得延迟。
这似乎是解决客户端延迟的合理解决方案吗?
答案 0 :(得分:15)
我将客户端时间戳记为传出数据包,并使响应保留原始时间戳。通过这种方式,您可以计算往返延迟,同时避免因服务器和客户端时钟未完全同步而导致的任何问题。
答案 1 :(得分:3)
您还可以为游戏协议中使用的数据包加时间戳。因此,您将拥有更多数据来集成统计信息。 (此方法对于避免由额外的数据突发引起的开销也很有用。您只需使用已经交换的数据来执行统计数据)
您还可以开始使用其他指标(例如差异),以便更准确地估算您的连接质量。
答案 2 :(得分:0)
如果您尚未真正启动项目,请考虑使用像KryoNet这样的网络框架,它具有RMI和高效的序列化,并将使用UDP自动发送ping请求。您可以轻松获得ping时间值。
答案 3 :(得分:0)
如果您正在测量往返延迟,则时钟漂移,HW时钟精度和OS api等因素会影响您的测量。如果不花钱在硬件上,最接近的就是使用RDTSC指令。但是RDTSC没有自己的问题,你必须小心你的称呼。