GeorgeTudosi
@GeorgeTudosi
Технический директор, кинематографист, яхтсмен

Как имитировать медленное соединение, Mac OS localhost?

Для отладки веб-приложения нужно сделать медленное соединение, чтобы посмотреть глазами, что происходит в браузере, в «замедленном режиме». Логи не подходят, важна визуальная составляющая. Достаточно ограничения пропускной способности канала, но если можно будет еще регулировать задержку и имитировать потерю пакетов, вообще отлично.

Сервер поднят на локальной машине, nginx. Браузер — Safari, могу для этой задачи использовать Chrome.

С задачей замедления внешних соединений прекрасно справляется Network Link Conditioner, официальный инструмент Apple. Но он не работает с локалхостом — скорость остается высокой.

Есть ли простой способ получить желаемое, или легче перенести эту часть отладки на внешний сервер?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
GeorgeTudosi
@GeorgeTudosi Автор вопроса
Технический директор, кинематографист, яхтсмен
Всё оказалось довольно просто, хотя и не очевидно. Раз уж используем nginx, можно применить его магию, верно? Заодно не придется каждый раз отключать замедлитель для внешних ресурсов.

Фрагмент nginx.conf:

http {
    server {
        listen 8080;
        limit_rate 1M;
    }
}
stream {
    server {
        listen 80;
        proxy_upload_rate 1M;
        proxy_pass 127.0.0.1:8080;
    }
}


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

Основной сервер унесен на порт 8080, и там происходит вся обработка запросов. limit_rate 1M; — это ограничение скорости отдачи ответа клиенту, и оно срабатывает в любом случае.

Подключаемся к разрабатываемому приложению через порт 80 (если вам нужно https, то 80 заменить на 443), то есть в браузере порт не указываем — для клиента всё выглядит в точности как обычно. А nginx отправляет запрос на порт 8080 с ограничением скорости proxy_upload_rate 1M;. Можно, разумеется, использовать и другой подходящий свободный порт.

Если надо ограничивать скорость только в особых случаях, а обычно удобнее иметь неограниченную скорость, можно слушать в блоке stream любой свободный порт, а в блоке http продублировать server с теми же параметрами, но без limit_rate и с «обычным» портом.

Всё работает вполне четко. Следует здесь только заметить, что скорость указывается в байтах в секунду, а не в битах в секунду, как мы привыкли применительно к толщине канала. Можно произвольно и независимо ограничивать скорость приема и отдачи, что может быть полезно для имитации асимметричных подключений.

Способ применим не только для MacOS, будет работать в любой системе, если вы используете nginx.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@deliro
65e4611e2b105078027393.png

Точно также можно во вкладке performance "замедлить" процессор
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы