Можно ли ограничить глобальную или пропускную способность канала сервером с помощью Netty?Пропускная способность сервера Throttle в процентах с использованием Netty
Я могу установить явные ограничения скорости чтения или записи через GlobalChannelTrafficShapingHandler, но я пытаюсь ограничить глобальную пропускную способность сервера примерно половиной доступной полосы пропускания. Поэтому, если сервер может загружаться со скоростью 8 Мбайт/с, я хочу ограничить загрузку примерно до 4 МБ/с. И я хочу, чтобы сервер настраивался с учетом изменений пропускной способности; поэтому, если скорость загрузки сервера снизится до 5 МБ/с (возможно, из-за использования сети другими приложениями), я хочу ограничить скорость до 2,5 МБ/с.
Я играл с переопределением AbstractTrafficShapingHandler.submitWrite() и добавлял задержку, основанную на длительности с предыдущего вызова, но логика кажется хрупкой и ненадежной.
Любые идеи о том, как разумно подойти к этой проблеме?
Возможно, QoS будет проще в этом случае. Если вы используете Linux, попробуйте http://superuser.com/questions/309063/how-can-i-prioritise-network-bandwidth-on-a-per-application-basis – kichik
@kichik Это для Java-приложения, которое работает на Win/Mac/Linux. – dejuknow
Очень сложно узнать, что такое «доступная полоса пропускания». Такие вещи, как «скорость ссылок», скорее всего, будут бесполезны, поскольку в большинстве систем узкое место, скорее всего, будет где-то дальше по линии. Помимо этого, глядя на совокупную пропускную способность, используемую приложением, вряд ли будет очень точной, поскольку она зависит одновременно от других приложений на хосте и любых узких мест, которые могут быть специфическими для любого клиента, находящегося в конце вашего TCP/IP-соединения , – BeeOnRope