Как я могу симулировать плохое интернет-соединение для тестирования?


105

Я занимаюсь разработкой многопользовательской онлайн-игры. Он хорошо работает, когда я тестирую его в локальной сети, но перед тем, как выпустить его, я хотел бы проверить, как работает пользовательский интерфейс для тех, кто не имеет такого хорошего соединения с сервером. Как я могу имитировать плохое интернет-соединение с высокой задержкой, низкой пропускной способностью, дрожанием и случайной потерей пакетов в локальной среде?


69
Отправь его мне на тестирование! Связи в моей стране ужасны по умолчанию.
Стефан

7
Похвальная цель. Я бы хотел, чтобы опубликованные студии делали то же самое. Эпические игры, я смотрю на тебя.
Гусдор

7
Найдите друга поблизости, который использует Comcast ...
WernerCD

12
Имитация плохого интернет-соединения содержит текущие ответы и многое другое.
MichaelHouse

2
Я сразу подумал об этом другом недавнем вопросе SE: superuser.com/questions/637594/…
Патрик М

Ответы:


63

Я думаю, Dummynet - это то, что вы ищете. Dummynet - это инструмент эмуляции сети, который может симулировать ограничения полосы пропускания, задержки, потери пакетов и многое другое. Вы можете легко выбрать, какой трафик вы хотите перехватить, и настроить ограничения, например, чтобы ограничить весь входящий трафик TCP до 2 Мбит / с, который вы делаете.

ipfw add pipe 2 in proto tcp
ipfw pipe 2 config bw 2Mbit/s

Вы видите, что выбор трафика осуществляется известным брандмауэром ipfw, а каналы предоставляют функции ограничения.

Он доступен для FreeBSD, Linux и Windows.


это работает с петлевой адаптер Windows?
Андрей Тылычко

Отвечая на мой собственный вопрос, нет, у меня это не работает на Windows 8.1, даже после того, как я отключил подписанное усиление драйвера
Андрей Тиличко

@AndyT Вы нашли что-то, что работает с обратной связью? Поиск чего-то, что делает packloss И работает с loopback, кажется трудным.
AaronLS

@AaronLS: пожалуйста, посмотрите другой ответ здесь: gamedev.stackexchange.com/a/100779/4731
Андрей Тиличко

33

Сетевой кондиционер

Если вы работаете на Mac, вы можете использовать Network Link Conditioner.

Панель настроек кондиционера сетевого соединения

Вы можете моделировать различные случаи плохого подключения к Интернету, в том числе Edge и 3G.

Кроме того, вы можете создавать свои собственные профили со своими настройками:

Пользовательские профили кондиционера сетевого соединения

Это бесплатно скачать в XCode (перейдите в XCode → Open Developer Tool → More Tools Developer… и загрузите Hardware IO Tools для XCode ).


Мне нравятся эти инструменты, но мне нужно что-то, что я могу использовать для автоматического тестирования. Кто-нибудь знает, есть ли интерфейс командной строки для этого?
Эрик Б

15

Если вы работаете в Linux, вы можете использовать netem для моделирования всех возможных проблем с сетью, таких как высокая задержка, низкая пропускная способность, потери пакетов и многие другие.

Для Windows есть опция NetLimiter, но я ее не использовал, поэтому не могу ручаться за нее.

Только что нашел приложение Mac под названием SlowlyApp .


1
-1 Как и в других ответах. Это всего лишь ссылки. Пожалуйста, обновите ответ, чтобы включить описания того, что делают приложения и как они это делают.
MichaelHouse

8
@ Byte56: То, что делают эти приложения, имитирует медленное и / или ненадежное сетевое соединение, как и спрашивает вопрос. Я почти уверен, как они это делают, это выходит за рамки этого сайта. Я бы сказал, что это очень хороший ответ на заданный вопрос; если есть проблема, это в вопросе, а не в ответах.
Илмари Каронен

1
Технически возникает вопрос: «Как я могу симулировать плохое интернет-соединение». Он не просит приложений сделать это. Но да, я думаю, что этот вопрос выходит за рамки этого сайта.
MichaelHouse


7

Как я могу имитировать плохое интернет-соединение с высокой задержкой, низкой пропускной способностью, дрожанием и случайной потерей пакетов в локальной среде?

Если вы работаете в Windows, вы можете попробовать SoftPerfect Connection Emulator . По сути, это драйвер, который внедряется между вашим приложением и сетевым уровнем (аналогично Wireshark / WinPCAP) для выбранного сетевого адаптера и может имитировать ограниченную пропускную способность, задержку, потерю пакетов и другие вещи. Пользовательский интерфейс прост и понятен.

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

Другой кросс-платформенный вариант - DummyNet , который ведет себя аналогичным образом (через ipfw), но немного менее прост в использовании.

Я хотел бы проверить, как работает пользовательский опыт для кого-то, кто не имеет такого хорошего соединения с сервером.

Я думаю, что эту часть вопроса можно было бы переформулировать как «как мне справиться с задержкой в ​​сети в моем приложении?» Одним из наиболее часто используемых и эффективных методов является Dead Reckoning . Связанная статья объясняет это лучше, чем я, но основная идея состоит в том, что ваши клиенты как бы «симулируют», где должна быть каждая сущность и что она должна делать с помощью алгоритма. Всякий раз, когда объект отклоняется от этого алгоритма (т. Е. Ввод игрока, событие на стороне сервера и т. Д.), Он отправляет обновление каждому клиенту.


5

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


1
На первый взгляд кажется, что Чарльз - это своего рода HTTP-прокси, поэтому он не может формировать простой TCP или UDP-трафик. Я что-то пропустил?
VBO

и это даже получил +5, WFT?
Мариан Падзиох

Я не уверен, что означает «формировать обычный TCP или UDP трафик», но я использовал этот инструмент именно для того, о чем спрашивал ОП, имитируя плохое интернет-соединение.
Джокинг

1
@jhocking Он означает, что это работает только для трафика HTTP. Многие игры в реальном времени используют TCP или UDP.
AaronLS

0

Если вы разбираетесь в Fiddler и интересуетесь только HTTP / 1, вы можете написать это.

Fiddler не поддерживает HTTP / 2, перехват с ним приведет к снижению всего трафика HTTP до HTTP / 1.


Интересно. Можете ли вы предоставить более подробную информацию? Может быть какой-нибудь пример скрипта?
Филипп

@Philipp Этот ответ ( stackoverflow.com/a/47401557/442351 ) приводит пример.
BanksySan

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

@ Филипп поддерживает WebSockets, просто горячий HTTP / 2. Тем не менее, вы должны взглянуть на HTTP / 2, это не что иное, как HTTP / 1, больше нет блокировки заголовка строки, нет нескольких рукопожатий, нет дублирующихся заголовков и / или файлов cookie.
BanksySan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.