我想知道如何在运行时最好地衡量网络吞吐量。我正在编写一个客户端/服务器应用程序(都在java中)。服务器定期通过套接字向客户端发送(压缩媒体数据的)消息。我想调整服务器使用的压缩级别以匹配网络质量。
所以我想测量一大块数据(比如500kb)完全到达客户端所需的时间,包括两者之间的所有延迟。像Iperf这样的工具似乎不是一种选择,因为他们通过创建自己的流量来进行测量。
我能想到的最好的想法是:以某种方式确定客户端和服务器的时钟差异,包括服务器发送每条消息的时间戳,然后让客户端向服务器报告此时间戳与时间之间的差异客户收到了消息。然后,服务器可以确定消息到达客户端所花费的时间。
有更简单的方法吗?这有什么图书馆吗?
答案 0 :(得分:1)
一个简单的解决方案:
在发送定义数量的软件包之前,在服务器上保存时间戳。
然后将软件包发送到客户端,让客户端在收到最后一个软件包后向服务器报告。
当客户端应答时,在服务器上保存新的时间戳。
现在您需要确定RTT并从两个时间戳之间的差异中减去RTT / 2。
这应该可以让您获得相当准确的测量结果。