Як я можу імітувати неправильне підключення до Інтернету для тестування?


105

Я розробляю онлайн-гру для кількох гравців. Він добре працює, коли я тестую його в локальній мережі, але перед тим, як випустити його, я хотів би перевірити, як працює досвід користувача для того, хто не має такого хорошого зв’язку з сервером. Як я можу імітувати погане з'єднання з Інтернетом із високою затримкою, низькою пропускною здатністю, тремтінням та випадковими втратами пакетів у локальному середовищі?


69
Надішліть його мені на тестування! Зв’язки в моїй країні за замовчуванням жахливі.
Стефан

7
Похвальна мета. Я б хотів, щоб опубліковані студії зробили те саме. Епічні ігри, я дивлюся на тебе.
Гусдор

7
Знайдіть друга, який використовує Comcast ...
WernerCD

12
Імітація поганого підключення до Інтернету містить поточні відповіді та багато іншого.
MichaelHouse

2
Я одразу подумав це інше нещодавнє запитання щодо SE: superuser.com/questions/637594/…
Patrick M

Відповіді:


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 AND працює з петлею здається складно.
AaronLS

@AaronLS: дивіться ще одну відповідь тут: gamedev.stackexchange.com/a/100779/4731
Андрій Тиличко

33

Кондиціонер для мережевих посилань

Якщо ви перебуваєте на Mac, ви можете використовувати кондиціонер Network Link.

Панель налаштування кондиціонера мережевої посилання

Ви можете імітувати різні випадки поганого підключення до Інтернету, включаючи Edge та 3G.

Крім того, ви можете створити власні профілі з власними налаштуваннями:

Кондиціонер мережевих посилань користувацьких профілів

Це безкоштовне завантаження в Xcode (перейдіть до Xcode → Відкрити інструмент для розробників → Інші інструменти для розробників… та завантажте апаратні засоби IO для Xcode ).


Мені подобаються ці інструменти, але мені потрібно щось, що я можу використовувати для автоматизованого тестування. Хтось знає, чи є для цього інтерфейс командного рядка?
Ерік Б

15

Якщо у вас є Linux, ви можете використовувати netem для моделювання всіх можливих проблем із мережею, як-от висока затримка, низька пропускна здатність, втрати пакетів та багато інших.

Існує опція для Windows під назвою NetLimiter, але я не використовував її, тому не можу поручитися за неї.

Щойно знайшли додаток для Mac під назвою SlowlyApp .


1
-1 Як і в інших відповідях. Це лише посилання. Оновіть відповідь, щоб включити описи того, що роблять програми та як вони це роблять.
MichaelHouse

8
@ Byte56: Що ці програми роблять, це імітувати повільне та / або ненадійне мережеве з'єднання, як і запитання. Я майже впевнений, як вони це роблять поза межами цього веб-сайту. Я б сказав, що це прекрасна відповідь на поставлене запитання; якщо є проблема, це в питанні, а не у відповідях.
Ільмарі Каронен

1
Технічно питання задає "Як я змоделюю погане з'єднання з Інтернетом". Він не просить додатків для цього. Але так, я думаю, що це питання виходить за межі цього веб-сайту.
MichaelHouse


7

Як я можу імітувати погане з'єднання з Інтернетом із високою затримкою, низькою пропускною здатністю, тремтінням та випадковими втратами пакетів у локальному середовищі?

Якщо у вас є Windows, ви можете спробувати емулятор підключення SoftPerfect Connection . Це в основному драйвер, який вводить себе між вашим додатком та мережевим шаром (подібним до Wireshark / WinPCAP) для вибраного NIC і може імітувати обмежену пропускну здатність, затримку, втрату пакету та інші речі. Інтерфейс користувача простий і простий.

Це комерційний продукт, але пробна версія дозволяє вам робити 30-секундні сплески "втручання", які повинні бути досить хорошими, щоб ви могли оцінити, чи робить цей інструмент те, що ви хочете.

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

Я хотів би перевірити, як працює досвід користувача для того, хто не має такого хорошого зв’язку з сервером.

Я думаю, що цю частину питання можна було б відновити як "як я маю справу з затримкою мережі в моїй програмі?" Один з широко використовуваних та ефективних методів - Dead Reckoning . Пов'язана стаття пояснює це краще, ніж я можу, але основна ідея полягає в тому, що ваші клієнти наче «імітують», де має бути кожна сутність і що вона повинна робити за алгоритмом. Щоразу, коли суб'єкт господарювання відхиляється від цього алгоритму (тобто введення гравця, подія на стороні сервера тощо), він надсилає оновлення кожному клієнту.


5

Я не використовував його деякий час, але я використовував Чарльза для тестування цього. Це програма з різними інструментами мережевої діагностики, включаючи моделювання згаданих вами проблем: "поганий інтернет з високою затримкою, низькою пропускною здатністю, тремтінням та випадковими втратами пакетів"


1
З першого погляду схоже, що Чарльз є своєрідним проксі-сервером HTTP, тому він не може формувати звичайний TCP або UDP-трафік. Я щось пропускаю?
vbo

і це навіть отримало +5, wft?
Marian Paździoch

я не впевнений, що означає "звичайний 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. Але дякую, що все-таки згадували про це.
Філіп

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