Chinaunix

标题: EPOLL或KQUEUE如何对SOCKET进行限速 [打印本页]

作者: musics    时间: 2008-06-30 13:28
标题: EPOLL或KQUEUE如何对SOCKET进行限速
EPOLL或KQUEUE模式下如何对SOCKET进行限速,比如针对某个用户的连接的最高速度2MB/s,不是那种每个连接用一个线程或进程来处理延时的
作者: net_robber    时间: 2008-06-30 14:17
我不太清楚应该怎么做

但是 肯定跟EPOLL没有关系
作者: musics    时间: 2008-06-30 14:25
原帖由 net_robber 于 2008-6-30 14:17 发表
我不太清楚应该怎么做

但是 肯定跟EPOLL没有关系

其实我想表达的意思就是说不用每个线程处理一个连接的方式,在这个问题上确实与用什么模型没有什么关系.谢谢你的回复
作者: linternt    时间: 2008-06-30 15:05
其实用个网管软件就可以搞定了,楼主必须用代码实现吗?

呵呵,真没想过这块!
作者: musics    时间: 2008-06-30 16:50
原帖由 linternt 于 2008-6-30 15:05 发表
其实用个网管软件就可以搞定了,楼主必须用代码实现吗?

呵呵,真没想过这块!

用网管软件实现没有那么方便定制,比如你一个FTP 服务器,或者代理服务器,你希望根据用户名实现限速,就很难达到效果了.
作者: system888net    时间: 2008-06-30 23:38
原帖由 musics 于 2008-6-30 13:28 发表
EPOLL或KQUEUE模式下如何对SOCKET进行限速,比如针对某个用户的连接的最高速度2MB/s,不是那种每个连接用一个线程或进程来处理延时的


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

实现后再用其它较复杂的方法.
作者: musics    时间: 2008-07-01 14:43
原帖由 system888net 于 2008-6-30 23:38 发表


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

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

主要就是不清楚如何来实现这个延迟,如果直接在工作线程中进行usleep之类的肯定是不行的.会影响到其它的socket.如何判断延时的时间已经到了?一直循环查询?
作者: yulc    时间: 2008-07-01 17:25
楼上的,
需要延时的socket,  你就不要放到你 epoll监听的句柄集去嘛...时间到了,再放到里面去
这样就无需usleep
作者: musics    时间: 2008-07-01 17:49
我目前的想法就是有数据到来时检查是否需要暂停,如果需要就从epol句柄集里边删除,同时计算出需要暂时的时长,加入暂停的列表中,然后找出接下来需要暂停的时间最短的socket,如果不符合处理条件就继续回到epoll等待,有符合条件的就进行处理.暂时按这样处理了.
作者: system888net    时间: 2008-07-01 21:28
原帖由 musics 于 2008-7-1 17:49 发表
我目前的想法就是有数据到来时检查是否需要暂停,如果需要就从epol句柄集里边删除,同时计算出需要暂时的时长,加入暂停的列表中,然后找出接下来需要暂停的时间最短的socket,如果不符合处理条件就继续回到epoll等待 ...


想法可行.
作者: weihua2008    时间: 2008-07-16 14:22
敢问楼主,用epoll的线程控制socket应该如何实现,本人初学者,望指教,
可以发到我的邮箱里,谢谢!
作者: okyzx    时间: 2008-07-31 15:57
这是应用层来实现的吧,跟底层无关




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2