Ограничение максимальной скорости розеток - PullRequest
1 голос
/ 17 апреля 2010

Я использую необработанные сокеты в Windows и пытаюсь найти способ ограничить максимальную скорость соединения для группы сокетов.

Например, у меня есть 3 сокета для 3 серверов, и я хочу ограничить общую скорость загрузки до 1 МБ.

Я гуглил и не могу найти ничего связанного. Есть идеи?

Ответы [ 3 ]

4 голосов
/ 17 апреля 2010

Если вы хотите ограничить скорость загрузки до 1 МБ в секунду, управляйте вызовами recv () таким образом, чтобы вы не выполняли recv () более 1 МБ за одну секунду. Прочитав максимум 1 МБ, дросселируйте поток (используя ThreadSleep) до следующей секунды. Это простой подход.

1 голос
/ 17 апреля 2010

Это все равно, что спросить: «Я хочу читать со своего жесткого диска вдвое быстрее». Или «Я хочу использовать только 50% циклов процессора». Не имеет смысла, это идет так быстро, как может. Если за ресурс конкурирует больше программ, то операционная система должна гарантировать, что все получат справедливую долю. Если вы не хотите получать справедливую долю, просто уменьшите приоритет потока, который читает. Или позвоните в Sleep ().

1 голос
/ 17 апреля 2010

Я думаю, что единственный способ реализовать это - это сложный путь ... путем измерения количества данных, которые были отправлены / получены по каждому сокету за последние (так много) секунд, и удержания при отправке / получении более данные, пока не прошло достаточно времени, чтобы ограничить общую среднюю пропускную способность тем, что вы хотите. Я реализовал эту логику, используя неблокирующие сокеты и select (), и это выполнимо (хотя и непросто).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...