【问题标题】:Limiting download speed using Java使用 Java 限制下载速度
【发布时间】:2016-04-20 03:34:23
【问题描述】:

我是 Java 编程的新手。我需要帮助来制作一个可以限制一个人的下载速度的程序。我想做这样的任务:

我想输入一个我想限制下载速度的人的 I.p。然后我将输入下载速度,例如 50 kbps/Mbps。输入值后,我将单击按钮,这将限制我输入的 I.p 的人的下载速度。

我在谷歌上搜索过,但我没有找到任何好的教程来学习这个。任何可以指导我正确方向的人。任何可以让我开始的教程。

提前致谢。

【问题讨论】:

  • 下载速度受ISP限制,如果你想通过java创建程序来手动更改,不太实用
  • @sleblanc 他甚至不能在 SO 上写一个合适的问题。我认为你给了他太多的信任。
  • @Kayaman,我希望 saki 真的想限制连接到他们服务器的人,否则我在这个问题上花了 5 分钟
  • @sleblanc 你可以在这里为某些人浪费时间。
  • @chrylis 在这个问题中没有明确说明,除了他是 Java 新手。基于此,我假设他没有任何代码,更不用说任何工作服务器了。

标签: java download


【解决方案1】:

我将笼统地回答,没有专门提到 Java。

限制连接的常用技术是在从打开的套接字读取后等待。你的代码可以做一些逻辑来计算它的下载速度。有很多方法可以做到这一点,你打算如何处理这将影响你如何做到这一点。

在类似 Python 的伪代码中:

data_per_timeslot = 500 * 1000 # 500 KB/s
timeslot = 1000 * 1000 # 1 sec (in us)

with new_connection() as conn:
    download_complete = False
    chunk_size = data_per_sec

    ts = nil

    while not download_complete:
        ts = time()
        buffer = conn.read(chunk_size)
        diff = time() - ts

        # do something with data
        data.append(buffer) 

        # sleep if there is still time left in our timeslot,
        # to throttle the connection a bit
        if diff < timeslot: 
            usleep(timeslot - diff)

如果您需要节流来消除服务器上的过度压力,那么如果连接速度在最后几秒钟内下降,则为用户提供一点提升是有意义的。假设我以 500 KB/s(节流)的速度下载;我在浏览器中加载了一个页面,下载速度以 250 KB/s 的速度下降了几秒钟;应该允许客户端通过以数百 KB/s 的突发速度提高下载速度来“赶上”。

但是,如果您需要在视频会议应用程序或类似应用程序的上下文中进行节流,则在传输速度下降后提高传输速度是没有意义的,因为没有要“赶上”的数据;在实时视频中,您会丢弃丢失的帧。

【讨论】:

  • @Saki,如果你想限制另一个人的带宽,你将不得不在他们的 ISP 处拉字符串,这很可能是非常非法的。但是,如果有人连接到您的服务器并且您想限制他们,我写的内容适用(将 read 更改为 write)。
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 2015-06-09
  • 2016-02-03
  • 2013-03-30
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多