公司产品软件版本下载限于阿里云服务器带宽的限制,时长出现一个下载占满带宽的问题。所以在服务端下载程序中加入限速设置
1 long downLoadSize = 0l; //每个单位时间内下载大小 2 long speedLastDownloadSize = 0l;//限速结束后文件已下载大小,用于判断下一个单位时间内已下载文件大小
3 long transferSpeed = Long.parseLong(SystemConfig.systemVariables.getOrDefault("transferSpeed", String.valueOf(bsize * 200)));//200kb/s 规定下载速度 4 long speedLimitTime = 1000l;//单位时间 毫秒 5 long speedLimitLasttime = System.currentTimeMillis();//下载开始时间,每次限速等待结束后重置为当前时间,用于判断开始时间和单位时间下载大小超出时间点之间的差值,进而判断等待时间 6 while ((n = bis.read(bytes)) != -1) { 7 out.write(bytes, 0, n); 8 //increment为每次下载的大小,downLoadSize为累计下载大小 9 downLoadSize = downLoadSize + n; 10 //限制下载速度 11 if (downLoadSize - speedLastDownloadSize >= transferSpeed) { 12 long interval = System.currentTimeMillis() - speedLimitLasttime; 13 //间隔时间小于单位时间,等待剩余的时间 14 if (interval < speedLimitTime) { 15 try { 16 Thread.sleep(speedLimitTime - interval); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 } 21 speedLastDownloadSize = downLoadSize; 22 speedLimitLasttime = System.currentTimeMillis(); 23 } 24 }
参考简书地址:https://www.jianshu.com/p/f34a9e3843f5