亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2929 | 回復(fù): 3
打印 上一主題 下一主題

[C++] 如何在服務(wù)器中實現(xiàn)download 限速 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-06-30 20:54 |只看該作者 |倒序瀏覽
環(huán)境 linux ,epoll
目前實現(xiàn)了一個簡單的proxy, 實現(xiàn)原來  bind 一個端口, 然后client 連接 獲取一個fd, 服務(wù)器主動連接一個遠處的服務(wù)器。

這樣就有2個fd,  類似一個pipe.  假設(shè) fd 1 是連接 客戶端的 fd 2 是連接 服務(wù)器的, 那么當(dāng)fd1 有數(shù)據(jù)可讀的時候,就把數(shù)據(jù) 讀出來寫入fd2, 如果fd2 有數(shù)據(jù)可讀就寫入fd1
這樣 一個proxy 就完成了。 現(xiàn)在有個問題 想實現(xiàn) 限速。

使用epoll. ET 模式,目前想這樣實現(xiàn), 每個連客戶端的fd 的數(shù)據(jù)結(jié)構(gòu) 帶一個時間戳, 帶一個記錄已讀數(shù)據(jù)的數(shù)值。

struct {
   int    fd;
   time  last_read_time;
   int    last_second_readdatalength;
};

每次epoll 返回 fd 1 可讀,那么就比較 時間錯,如果時間戳不一樣 就說明時間變化了,首先把 記錄里已讀數(shù)據(jù)的數(shù)值 清空,然后讀取 最多 100k( 這就是我要的限速結(jié)果)
然后全寫入fd2. 可讀數(shù)據(jù)多余100k, 那么就放棄讀, 那么epoll 以后也不會返回了。 沒過1秒,就需要遍歷一次 所有的fd, 每個fd 都嘗試去讀一下 防止阻塞住。

這個想法可行嗎?

論壇徽章:
6
酉雞
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23雙魚座
日期:2014-01-23 13:08:332015亞冠之鹿島鹿角
日期:2015-09-03 14:36:002015亞冠之武里南聯(lián)
日期:2015-09-18 10:48:1315-16賽季CBA聯(lián)賽之山西
日期:2016-05-05 00:05:33
2 [報告]
發(fā)表于 2014-06-30 23:40 |只看該作者
代理的話,數(shù)據(jù)大部分時候是雙向的

也就是說client的請求和server的反饋可能同時進行,你這樣用單方向的通道實現(xiàn)可能會有問題

限速不知道用程序怎么實現(xiàn),但用現(xiàn)成的有

1)iptables應(yīng)該可以限制具體IP的流量和連接數(shù)

2)以及TC(Traffic Control)

論壇徽章:
0
3 [報告]
發(fā)表于 2014-06-30 23:55 |只看該作者
就是需要實現(xiàn)一個 nginx 的流控機制。 關(guān)鍵是高效!

論壇徽章:
0
4 [報告]
發(fā)表于 2014-07-02 22:22 |只看該作者
搞定。!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP