контроль пропускной способности через Sleep - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть этот код, дело в том, что я хочу получать не более 600 Кбит / с с использованием сокета UDP, я реализовал алгоритм, использующий длительность, в течение которой мы получаем, и команду сна ....*

проблема в том, что он получает сообщение, но время от времени блокирует процесс приема ... что, я думаю, приведет к потере данных, особенно когда я использую UDP ...

любойальтернативным решением является welcolme ...

заранее спасибо ..

Ответы [ 3 ]

1 голос
/ 14 декабря 2010

Если данные поступают по UDP, нет способа уменьшить пропускную способность на принимающей стороне.Вы должны указать отправляющему компьютеру отправлять меньше данных.Единственным выбором получателя является получение пакетов UDP, или позволить им отбрасываться, и что-то с ними делать, или нет.

Если вы используете TCP, то протокол TCP включает встроенный способ делатьВы хотите (называемый «источник гашения») ... Уровень протокола TCP получателя отправит отправителю сообщение, сообщающее отправителю замедлить работу, если у получателя возникают проблемы с поддержанием работы.(и вы можете влиять на то, что «у получателя возникают проблемы», читая данные медленнее, чем обычно, если хотите).

1 голос
/ 09 декабря 2010

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

0 голосов
/ 09 декабря 2010

Если вы используете неблокирующие сокеты с select(), вы можете просто игнорировать данные, пока не будете готовы их прочитать.Не чтение данных приведет к замедлению TCP-соединения.Однако таким образом вы не точно контролируете объем полученных данных.Это просто приближение.Все известные мне методы, позволяющие более точно определить эту полосу пропускания, реализованы на стороне отправителя.

...