免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6615 | 回复: 11
打印 上一主题 下一主题

EPOLL或KQUEUE如何对SOCKET进行限速 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-30 13:28 |只看该作者 |倒序浏览
EPOLL或KQUEUE模式下如何对SOCKET进行限速,比如针对某个用户的连接的最高速度2MB/s,不是那种每个连接用一个线程或进程来处理延时的

论坛徽章:
0
2 [报告]
发表于 2008-06-30 14:17 |只看该作者
我不太清楚应该怎么做

但是 肯定跟EPOLL没有关系

论坛徽章:
0
3 [报告]
发表于 2008-06-30 14:25 |只看该作者
原帖由 net_robber 于 2008-6-30 14:17 发表
我不太清楚应该怎么做

但是 肯定跟EPOLL没有关系

其实我想表达的意思就是说不用每个线程处理一个连接的方式,在这个问题上确实与用什么模型没有什么关系.谢谢你的回复

论坛徽章:
0
4 [报告]
发表于 2008-06-30 15:05 |只看该作者
其实用个网管软件就可以搞定了,楼主必须用代码实现吗?

呵呵,真没想过这块!

论坛徽章:
0
5 [报告]
发表于 2008-06-30 16:50 |只看该作者
原帖由 linternt 于 2008-6-30 15:05 发表
其实用个网管软件就可以搞定了,楼主必须用代码实现吗?

呵呵,真没想过这块!

用网管软件实现没有那么方便定制,比如你一个FTP 服务器,或者代理服务器,你希望根据用户名实现限速,就很难达到效果了.

论坛徽章:
0
6 [报告]
发表于 2008-06-30 23:38 |只看该作者
原帖由 musics 于 2008-6-30 13:28 发表
EPOLL或KQUEUE模式下如何对SOCKET进行限速,比如针对某个用户的连接的最高速度2MB/s,不是那种每个连接用一个线程或进程来处理延时的


可考虑先用如下简单的方法:
1.程序里计算每个socket的发送速度.
2.每次发送前判断此时发送是否超过上限制,若会超过则延迟n个时间单位,不超过则直接发送.

实现后再用其它较复杂的方法.

论坛徽章:
0
7 [报告]
发表于 2008-07-01 14:43 |只看该作者
原帖由 system888net 于 2008-6-30 23:38 发表


可考虑先用如下简单的方法:
1.程序里计算每个socket的发送速度.
2.每次发送前判断此时发送是否超过上限制,若会超过则延迟n个时间单位,不超过则直接发送.

实现后再用其它较复杂的方法.

主要就是不清楚如何来实现这个延迟,如果直接在工作线程中进行usleep之类的肯定是不行的.会影响到其它的socket.如何判断延时的时间已经到了?一直循环查询?

论坛徽章:
0
8 [报告]
发表于 2008-07-01 17:25 |只看该作者
楼上的,
需要延时的socket,  你就不要放到你 epoll监听的句柄集去嘛...时间到了,再放到里面去
这样就无需usleep

论坛徽章:
0
9 [报告]
发表于 2008-07-01 17:49 |只看该作者
我目前的想法就是有数据到来时检查是否需要暂停,如果需要就从epol句柄集里边删除,同时计算出需要暂时的时长,加入暂停的列表中,然后找出接下来需要暂停的时间最短的socket,如果不符合处理条件就继续回到epoll等待,有符合条件的就进行处理.暂时按这样处理了.

论坛徽章:
0
10 [报告]
发表于 2008-07-01 21:28 |只看该作者
原帖由 musics 于 2008-7-1 17:49 发表
我目前的想法就是有数据到来时检查是否需要暂停,如果需要就从epol句柄集里边删除,同时计算出需要暂时的时长,加入暂停的列表中,然后找出接下来需要暂停的时间最短的socket,如果不符合处理条件就继续回到epoll等待 ...


想法可行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP