2010-04-17 78 views
1

我在Windows上使用原始套接字,並試圖找到限制一組套接字的最大連接速度的方法。限制套接字的最大速度

例如,我有3個服務器的插座,並希望將總下載速度限制爲1mb。

我GOOGLE和無法找到任何相關的東西。有任何想法嗎?

回答

4

如果您希望將下載速度限制爲每秒1 MB,請以不會在一秒鐘內收回1 MB以上的方式管理您的recv()調用。一旦你讀取了最大1MB的內容,就把線程調節一下(使用ThreadSleep)直到下一秒。這只是一個簡單的方法。

+0

其中一個問題是,您可能需要足夠小的數據包大小以足夠快的速度通過循環來休眠。但它有助於減緩一切。 – jpyllman 2010-04-17 02:06:25

1

我認爲實現這一目標的唯一方法是通過測量在最後(很多)秒內在每個套接字上發送/接收的數據量,以及延遲發送/接收更多的數據,直到有足夠的時間將總平均帶寬限制到您想要的水平。我已經使用非阻塞套接字和select()實現了這個邏輯,它是可行的(雖然不容易)。

1

這就像是問我「我想從我的硬盤快一半」。或者「我只想使用50%的CPU週期」。沒有道理,它儘可能快地發展。如果有更多的程序競爭資源,那麼這取決於操作系統,以確保每個人都能獲得公平的份額。如果你不想要一個公平的份額,那麼簡單地降低你的線程在閱讀中的線程優先級。或者叫睡眠()。

+0

讓「系統」處理負載的+1。而且大部分時間給那些能夠快速完全加速的人可以讓事情更快完成。但我想有時候你需要對視頻提要很好。 – jpyllman 2010-04-17 02:04:21

+0

那麼問題是,它目前佔用所有的用戶下載帶寬,所以很容易讓他們限制它。 – Lodle 2010-04-17 04:41:53