使用Java限制下载速度

时间:2016-01-14 17:23:50

标签: java downloading

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

我将以一般方式回答,而不是专门针对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,持续几秒钟;应该允许客户赶上&#34;通过以几百KB / s的突发速度提高下载速度。

但是,如果您需要在视频会议应用程序或类似应用程序的环境中进行限制,那么在它下降后提高传输速度是没有意义的,因为没有数据可以追赶&#34;赶上&#34;至;在实时视频中,您可以删除丢失的帧。