【问题标题】:How to measure network throughput during runtime如何在运行时测量网络吞吐量
【发布时间】:2011-10-22 18:09:08
【问题描述】:

我想知道如何在运行时最好地测量网络吞吐量。我正在编写一个客户端/服务器应用程序(都在 java 中)。服务器定期通过套接字向客户端发送消息(压缩媒体数据)。我想调整服务器使用的压缩级别以匹配网络质量。

所以我想测量大量数据(例如 500kb)完全到达客户端所需的时间,包括其间的所有延迟。像 Iperf 这样的工具似乎不是一种选择,因为它们通过创建自己的流量来进行测量。

我能想到的最好的主意是:以某种方式确定客户端和服务器的时钟差异,在每条消息中包含一个服务器发送时间戳,然后让客户端向服务器报告这个时间戳和时间之间的差异客户端收到消息。然后,服务器可以确定消息到达客户端所用的时间。

有没有更简单的方法来做到这一点?有没有这方面的库?

【问题讨论】:

  • 我不明白为什么在开始服务客户端时很难在服务器端节省时间并检查结束时的持续时间。
  • 那么您将如何检查持续时间?

标签: java networking bandwidth latency throughput


【解决方案1】:

一个简单的解决方案:

在您发送指定数量的包裹之前,在服务器上保存一个时间戳。

然后将包发送给客户端,让客户端在收到最后一个包后向服务器报告。

客户端应答后在服务器上保存一个新的时间戳。

您现在需要做的就是确定 RTT 并从两个时间戳之间的差中减去 RTT/2。

这应该可以让您获得相当准确的测量结果。

【讨论】:

  • 好主意!会更容易。如果 RTT 或多或少保持不变,并且客户端到服务器的通道没有拥塞。
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多