0
点赞
收藏
分享

微信扫一扫

(P18)miniftpd项目实战18:限速实现


文章目录

  • ​​1.限速实现​​

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左右



举报

相关推荐

0 条评论