Я хотел бы иметь возможность ограничить пропускную способность TCP-соединения в моем коде. В этом вопросе есть некоторые подсказки, но не совсем то, что мне нужно. Я пытался взломать код src стандартной библиотеки go (пакет net/tcp), используя аналогичный подход, но потерпел неудачу. Моя основная идея состоит в том, чтобы как-то медленно записывать данные из системного вызова во внутренний буфер, тем самым заставляя ОС отбрасывать tcp-пакеты.
Ограничить скорость загрузки tcp в Golang
Ответы (1)
Как сказано в комментарии, проще всего сделать это на уровне ОС с помощью инструмента WonderShaper. Если вы посмотрите на скрипт 'wondershaper', он использует команду '/sbin/tc' из '< пакет href="https://github.com/shemminger/iproute2" rel="nofollow noreferrer">iproute2. Я понимаю, что это не совсем то, что вы хотели бы сделать, но вы можете перейти на более низкий уровень, выполнив команды «tc» в исходном коде с помощью os.exec(). Внедрение вашего собственного алгоритма «управления трафиком» может быть слишком трудоемким и не необходимым для вашей цели.
person
Joseph Paul
schedule
27.01.2018
/proc/sys/net/ipv4/tcp_rmem
(третье число — максимальный размер буфера в байтах) за раз. Для долгоживущего соединения вы можете усреднить его с течением времени (буфер заполняется всплеском, потребляется медленно, буфер перезаполняется и т. д.). Чтобы действительно ограничить пропускную способность, вам нужно сделать это на уровне ОС, а не в Go. См. unix.stackexchange.com/a/28203/40168 . - person Graham King   schedule 14.11.2017