【问题标题】:Calculating bandwidth speed of data sent/received over a socket?计算通过套接字发送/接收的数据的带宽速度?
【发布时间】:2010-08-20 18:21:49
【问题描述】:

有人对如何计算套接字的带宽使用有任何提示吗?

例如,当我通过套接字向所连接的服务器发送数据时,我想显示正在发送的 Kb/s。

Google 搜索没有发现任何有用的信息。也许我在搜索错误的术语。

【问题讨论】:

标签: java sockets iostream


【解决方案1】:

您可能能够轻松做的最好的事情是记录您开始写入的时间,然后计算您已成功发送到Socket.getOutputStream.write() 方法的字节数。对于少量数据,这将非常不准确,因为它只是填满了操作系统的传输缓冲区,最初占用字节的速度比实际发送它们的速度要快得多。

然而,它应该在相当大量的数据上摊销到基本上正确的比率。

【讨论】:

  • 这在理论上是可行的,但它不能非常准确地表示当前的传输速度。例如:如果我记录了 5 分钟……前 2.5 分钟什么都不做,最后 2.5 分钟发送 100kb/s。在 5 分钟结束时,它会告诉我平均速度为 50kb/s。自从我开始传输以来,我并不是在寻找平均速度。我正在寻找当前的速度。也许最后 5 秒的平均值会起作用,但我不知道要录制这样的东西。
  • 这称为移动平均线:en.wikipedia.org/wiki/Moving_average。尽管有多种方法,但计算起来非常简单。在任何给定时刻确实没有计算带宽这样的事情。因为数据是离散的,所以你必须有一个平均值。一种非常简单的方法是average = (average + new_measurement_average) / 2.0
  • 注意:Guava 的CountingOutputStream 可以很容易地将输出流与另一个计算其写入字节数的流包装在一起。
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多