我是java编程的新手。我需要帮助制作一个可以限制人的下载速度的程序。我想这样做这个任务:
我想输入我想限制的下载速度的人的I.p。然后我将输入50 kbps / Mbps的下载速度。输入值后,我会点击按钮,这将限制我输入的人的下载速度。
我在谷歌上搜索过,但我还没有找到任何好的教程来学习这个。任何能指导我正确方向的人。任何可以给我一个开始的教程。
提前致谢。
答案 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;至;在实时视频中,您可以删除丢失的帧。