Имитация медленного интернет-соединения


188

Я знаю, что это довольно странный вопрос. Поскольку я обычно разрабатываю приложения, основываясь на «предположении», что у всех пользователей медленное интернет-соединение. Но кто-нибудь думает, что есть способ программно симулировать медленное интернет-соединение, чтобы я мог «увидеть», как приложение работает при различных «скоростях соединения»?

Я не беспокоюсь о том, какой язык используется. И я не ищу примеры кода или что-то еще, просто интересуюсь логикой этого.

Ответы:


109

Если вы используете Windows, Fiddler - отличный инструмент. Он имеет параметр для имитации скорости модема, и для тех, кто хочет больше контроля, есть плагин для добавления задержки для каждого запроса .

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

ДОБАВЛЕНО : Эта статья в блоге Павла Дончева о Software Technologies показывает, как создавать настраиваемые моделируемые скорости: ограничение скорости вашего интернет-соединения с помощью Fiddler .


6
Привет, я написал небольшое руководство по моделированию медленного интернет-соединения, которое может оказаться полезным: developertipoftheday.com/2010/12/… - полное раскрытие - это мой собственный блог, но на всякий случай это помогает, поскольку я весь в распространении доброе слово скрипача :-)
Alex KeySmith

Проблема с этим подходом с использованием fiddler заключается в том, что имитация задержки не является точной, она работает на неверном уровне протокола, поэтому вы не можете должным образом симулировать медленный запуск.
Сэм Шафран

@SamSaffron, Извините, что выкопал старый пост, как этот, но знаете ли вы какие-либо другие инструменты, которые помогают в симуляции медленных запусков?
Аниш Рамасвами

@AnishRam Лучше всего использовать dummynet / ipfw, который поставляется с bsd и family, freebsd, osx и т. Д. Barkingiguana.com/2009/12/04/…
Сэм Саффрон

@AnishRam Также см. Netem linuxfoundation.org/collaborate/workgroups/networking/netem может смоделировать множество условий с помощью iproute2.
Филипп Рик

154

Начиная с Chrome 38 вы можете делать это без каких-либо плагинов. Просто нажмите «Проверить элемент» (или « F12горячую клавишу»), затем нажмите «Переключить мод устройства», введите описание изображения здесьи вы увидите что-то вроде этого:

введите описание изображения здесь

Среди многих других функций он позволяет моделировать конкретное интернет-соединение (3G, GPRS).

PS для людей, которые пытаются ограничить скорость загрузки. К сожалению, в настоящее время это невозможно.

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

Обратите внимание, что, нажимая на Нет регулирования, вы можете создать свои собственные параметры регулирования.

введите описание изображения здесь


2
Теперь регулирование Chrome Dev Tools ограничивает скорость загрузки и выгрузки. Но это ограничивает только текущую страницу в Chrome, поэтому вы не можете использовать ее для проверки своей страницы в других браузерах. Для этого вам нужно использовать другие инструменты, такие как Fiddler.
Леонид Васильев

3
Стоит отметить, что в настоящее время WebSockets не регулируется
mseddon

Регулирование загрузки не сработало во многих версиях Chrome, включая последнюю (70.0). На трекере есть отчет об ошибке .
Мэтт

По моему опыту, основной причиной медленной работы в Интернете является то, что проволочные DNS провайдеров кабельных сетей не могут разрешить рекламные серверы или CDN. Иногда вся страница остается пустой до тех пор, пока попытка их разрешения не увенчается успехом или не истечет время ожидания. Может ли Chrome имитировать это?
StackOverthrow

45

1
Network Link Conditioner поддерживается Apple (поэтому он стабилен и надежен), НО это относится только к симулятору Xcode.
Бен Уилер,

4
@BenWheeler Пробовал недавно, он, безусловно, был применен во всей системе, даже localhost
aromero

2
Я могу подтвердить, что Network Link Conditioner действительно применяется ко всему сетевому стеку.
Фред Воллмер,

14

На машинах Linux вы можете использовать wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} и {up} - пропускная способность в кбит / с

Например, если вы хотите ограничить пропускную способность интерфейса eth1 до восходящей линии связи 256 кбит / с и нисходящей линии связи 128 кбит / с,

$ sudo wondershaper eth1 256 128

Чтобы очистить предел,

$ sudo wondershaper clear eth1 

13

Я использовал http://www.netlimiter.com/, и он работает очень хорошо. Не только ограничить скорость для отдельных процессов, но также показывает фактические скорости передачи.


Большинство других инструментов обеспечивают управление пропускной способностью через искусственную задержку, что, похоже, не относится к netlimiter, что хорошо. Однако, в конце концов, это коммерческий инструмент (с пробной версией), доступный только под Windows.
Александр Стельмачонек

6

Существуют прокси-серверы TCP, такие как iprelay и Sloppy, которые формируют полосу пропускания для имитации медленных соединений. Вы также можете формировать полосу пропускания и моделировать потерю пакетов, используя инструменты IP-фильтрации, такие как ipfw и iptables.


Спасибо, я посмотрю в ипрелай и Слоппи Джо.

Спасибо, ipfw прекрасно работает. Вот краткое руководство, которое я увидел, которое было полезно: barkingiguana.com/2009/12/04/…
Эрик Нгуен

4

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


4

Используйте прокси-сервер для отладки с функциями регулирования, такими как Charles или Fiddler .

Вы найдете их полезными для веб-разработки в целом. Основным отличием является то, что Чарльз является условно-бесплатным программным обеспечением, а Fiddler - бесплатным.


Вы запускаете это как прокси. Браузер автоматически подключается к нему и перенаправляет запросы в ваше веб-приложение.
Бен М,

Для Fiddler у него есть оба режима работы внутри / снаружи браузера.
Кен Д

4

Также, для симуляции медленного соединения на некоторых * nixes, вы можете попробовать использовать ipfw . Более подробная информация предоставлена ​​ответом Бена Ньюмана на этот вопрос Quora.


2

Используйте такой инструмент, как TCPMon . Это может подделать медленное соединение.

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


2

Вы можете использовать NetEm (эмуляция сети) в качестве прокси-сервера для эмуляции многих характеристик сети (скорость, задержка, потеря пакетов и т. Д.). Он управляет сетью с помощью пакета iproute2 и включен в ядро ​​большинства дистрибутивов Linux.

Он управляется tcприложением командной строки (из пакета iproute2 ), но есть также некоторые веб-интерфейсы для NetEm, например PHPnetemGUI2 .

Преимущество состоит в том, что, как я писал, он может эмулировать не только различные скорости сети, но также, например, потерю пакетов, дублирование и / или повреждение, случайную или заданную задержку и т. Д., Так что вы можете эмулировать различные плохо работающие сети.

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

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


1

Mac OSX с 10.10 имеет приложение под названием Murus Firewall , которое действует как графический интерфейс для pf, заменяющего ipfw.

Он очень хорошо работает для регулирования всей системы или домена. Я просто смог использовать его, чтобы снизить скорость загрузки между 300 Кбит / с и 30 Мбит / с, чтобы проверить, как настраивается потоковый видеоплеер.


0

Существует также еще один инструмент под названием WIPFW - http://wipfw.sourceforge.net/

Это немного старая школа, но вы можете использовать ее для симуляции медленного соединения. Он основан на Windows, и этот инструмент позволяет администратору отслеживать, сколько трафика маршрутизатор получает с определенного компьютера или, например, объем трафика WWW, который он перенаправляет.


0

Обновление этого (9 лет после того, как его спросили) как ответ, который я искал, не было упомянуто:

Firefox также имеет предустановки для регулирования скорости соединения. Найти их в сетевом мониторе вкладке « » инструментов разработчика. По умолчанию «Нет регулирования».

Самая низкая скорость - GPRS ( скорость загрузки: 50 Кбит / с, скорость загрузки: 20 Кбит / с, минимальная задержка (мс): 500 ), от «хорошего» и «обычного» 2G, 3G и 4G до DSL и WiFi ( скорость загрузки: 30 Мбит / с, загрузка скорость: 15 Мбит / с, минимальная задержка (мс): 2 ).

Больше в документации по Dev Tools .


0

Для Linux может быть полезен следующий список статей:

Лично, хотя Dummynet хорош, я считаю NetEm наиболее универсальным для моих сценариев использования; Меня обычно интересует эффект задержек, а не пропускная способность (то есть проблемы с WiFi-соединением), и очень легко эмулировать случайную потерю / повреждение пакетов и т. Д. Он также очень доступен и бесплатен (в отличие от аппаратного Linktropy). ).

С другой стороны, для Windows Clumsy потрясающий. Я также хотел бы добавить, что регулирование браузера (в отношении веб-сайтов) не является точным методом для эмуляции реальных сетевых проблем (я думаю, что «TKK» прокомментировал несколько причин, приведенных выше).

Надеюсь, это поможет кому-то!


0

Один общий случай формирования одного TCP-соединения может быть фактически собран из двух пар socatи cpipeв UNIX-моде, например так:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

Это моделирует соединение с пропускной способностью около 300Кб / с от вашей службы в :5000и до приблизительно 10 килобайт / с и прослушивает :5555входящие соединения. Предупреждение : обратите внимание, что это для каждого соединения , поэтому каждое отдельное TCP-соединение получает эту сумму.

Объяснение: Внешний (слева) socatпрослушивает с заданными параметрами :5555в качестве разветвляющегося сервера. Затем первая cpipeкоманда в SYSTEM:...параметре регулирует данные, которые поступают в сокет: 5555 (и выходит из первого, внешнего socat) до максимум 10 КБ / с. Затем эти данные пересылаются с помощью другого, socatкоторый подключается localhost:5000(где служба, которую вы хотите замедлить, должна прослушивать). Данные из localhost:5000 затем помещаются в правильную cpipeкоманду, которая (с заданными значениями) дросселирует ее до 300 кБ / с.

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

Использование более распространенного bufferинструмента вместо cpipeвероятного также возможно.

(Авторы: это основано на рецепте "двойного тройника" Кристофа Лора из socatдокументации)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.