文章目录
1.限速实现
- 限速的关键是睡眠,如果发现当前传输速度超过最大传输速度就让进程睡眠。
传输速度 = 传输字节数 / 传输时间;
IF 当前传输速度 > 最大传输速度 THEN
睡眠时间 = (当前传输速度 / 最大传输速度 – 1) * 当前传输时间;
=====》用初中的方法简单推导下
=====》由传输速度 = 传输字节数 / 传输时间;关系可知,速度与时间成反比
速度1 / 速度2 = 时间2 / 时间1
=====》推导
速度1 / 速度2 - 1 = 时间2 / 时间1 -1 = (时间2 - 时间1) / 时间1
(时间2 - 时间1) = (速度1 / 速度2 – 1) *时间1
速度1当作当前传输速度,速度2当作最大传输速度,时间1是当前传输速度所花销的时间
- eg:miniftpd18\ftpproto.c
void limit_rate(session_t *sess, int bytes_transfered, int is_upload)
miniftpd18\sysutil.h,miniftpd18\sysutil.c
long get_time_sec(void);
long get_time_usec(void);
void nano_sleep(double seconds);
- 测试:
上传限制100KB/s,下载限制为200KB/s
下载速度是200K左右