我正在尝试测量套接字连接的ping。
像是这样;
服务器:向客户端发送ping
客户端:接收ping并将当前时间编码为响应
服务器:解码响应并计算ping =当前时间-响应时间
从理论上讲,这应该告诉我一个相当准确的测量数据从客户机-〉服务器传输所需的时间。
ISSUE是客户端(Linux VM)发送ping时的编码时间(米利斯),比服务器上缓存的时间早约4秒。
看起来Instant.now()返回的结果在不同的计算机上不一致。
我已经通过简单地输出Instant.now().toEpochMilli()确认了这一点
在“同时”运行两个测试,VM上的时间落后了几秒钟?这是怎么回事?
2条答案
按热度按时间ryoqjall1#
虚拟机默认占用服务器时间,所以你需要检查服务器上的时间设置。
基本上服务器和客户端是两台不同的机器。这两台机器的时间不同步。你需要检查两台机器的时间并纠正不正确的地方。这与Java无关。
2hh7jdfx2#
谢谢@aatwork提供的信息,我已经解决了我的问题。
这个问题来自于我对时间和UTC如何在全球范围内工作缺乏了解,任何一台indivial机器都可能会有偏移。
要更正此错误,应该从NTP服务器轮询时间。这样做可以在多台机器上同步结果。
Querying NTP Server in Java
Dependency: Apache Commons Net
List of Top Public Time Servers