Как отбрасывать пакеты, если ограничить скорость загрузки сокетом? - PullRequest
0 голосов
/ 20 февраля 2012

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

Предположим, что моя программа однопоточная, а данные выглядят так:

[ downloaded ] [ current buffer (downloading) ] [ un-downloaded ]

Если я отброшу какой-нибудь пакет, когда вычисленная скорость превысит порог, как я собираюсь восстановить этот пакет?Таким образом, данные будут непрерывными.

Как мне тогда отбросить пакет?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

TCP предназначен для повторной отправки неподтвержденных пакетов. Это происходит как часть протокола и является основой алгоритма с утечкой памяти.

Из-за этого я могу думать только о том, чтобы отказаться от пакетов, если используемая библиотека имеет функцию не отправлять ACK после получения пакета. В этом случае просто отправьте ACK для всех пакетов, которые вы хотите сохранить, и проигнорируйте остальные, поскольку они будут повторно отправлены позже.

Сказав, что большинство библиотек не будут поддерживать эту функцию, так как она очень низкого уровня, и они обрабатывают часть TCP внутри.

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

0 голосов
/ 20 февраля 2012

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

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