java如何测量服务器和客户端之间的延迟

java如何测量服务器和客户端之间的延迟,java,android,network-programming,Java,Android,Network Programming,我有一个android应用程序,我想向一些客户端发送一些命令(通常是整数)(它们也是java andoid)。重要的是测量发送命令和接收消息之间的延迟时间(在客户端)。该应用程序将向所有客户端共享音乐的当前时间,客户端应同步播放音乐(即同步!!)。你对此有什么想法 再次感谢:)我不明白这有什么困难,在发送请求之前获取当前时间戳(1)(以毫秒为单位),在收到服务器响应时获取当前时间戳(2) 然后执行(2)-(1),您将得到延迟 但是许多因素需要处理,比如网络信号强度。你所要求的即使不是不可能的,也

我有一个android应用程序,我想向一些客户端发送一些命令(通常是整数)(它们也是java andoid)。重要的是测量发送命令和接收消息之间的延迟时间(在客户端)。该应用程序将向所有客户端共享音乐的当前时间,客户端应同步播放音乐(即同步!!)。你对此有什么想法


再次感谢:)

我不明白这有什么困难,在发送请求之前获取当前时间戳(1)(以毫秒为单位),在收到服务器响应时获取当前时间戳(2)

然后执行
(2)-(1)
,您将得到延迟


但是许多因素需要处理,比如网络信号强度。

你所要求的即使不是不可能的,也是很难实现的。在分布式系统中,不可能认为所有时钟都处于同步状态,除非在所有设备中都有原子钟,或者在设备之间接受一定的漂移。 无法将服务器中的时间戳集与客户端中的时间戳集进行比较。此外,您不能保证所有设备都能同时接收到消息,实际上它们不会

测量消息所用时间的唯一方法是确定往返时间,因为在这种情况下,您使用的是同一节点/设备的时钟。然后将roun trip time除以2,以估计消息到达目的地所需的时间。正如你所想,它一点也不准确。此外,邮件到达目的地的时间也将始终不同于以前的时间

如果您接受小于1秒的时钟漂移,另一种选择是使用网络时间协议(NTP)同步所有时钟


如果希望多台设备同时播放一首歌曲,则不应依赖网络时间,而应以不同的方式同步设备。例如,试想一下,设备可能会处理其他设备产生的声音,并基于此同步(有专利吗?)。

在发送前存储发送时间,发送时间随附任何内容。在接收器端存储接收时间。比较客户端和服务器之间的发送时间和接收时间。@bpgeck该应用程序在android平台上,因此服务器的时间和客户端的时间不一定相同!!每一秒都很重要,你不需要计算。你测量它。应用程序在android平台上,所以服务器的时间和客户端的时间肯定不一样!没关系,你想要的只是延迟,所以你只能在客户端测量它。客户端和服务器时间戳之间的差异是:*1000。这是往返时间。如果你想让所有设备同时播放一首歌,那么它几乎总是不同的,而且不够精确。