Тестирую соединение с флеш-клиентом и облачным сервером (boost::asio
для программного обеспечения) через TCP-соединение. Мое соединение с сервером и так очень плохое - в среднем пинг 120 мс. Я обнаружил, что когда я начинаю отправлять пакеты размером 2 байта (без заголовка tcp) со скоростью 30 пакетов / с - пинг увеличивается до 170-200 в среднем. Я думаю, что это действительно плохо, и мое плохое соединение и плохой облачный провайдер являются причиной такого высокого пинга без какой-либо нагрузки. Что вы думаете? (Я тестировал свое программное обеспечение - оно может вычислять около 50 тысяч небольших пакетов в секунду, поэтому программное обеспечение не является проблемой).
Я измеряю свой пинг через флеш-клиент - отправляю пакет с отметкой времени и немедленно отправляю с сервера клиенту.
Мое соединение с сервером и так очень плохое - в среднем пинг 120 мс.
Я сделал похожий тест на www.google.com
, проверил время отклика по TCP и получил 160 миллисекунд. У Google плохая связь? TCP не был рассчитан на быстрое время отклика.
Я измеряю свой пинг через флеш-клиент - отправляю пакет с отметкой времени и немедленно отправляю с сервера клиенту.
TCP по своей природе задерживает до 200 миллисекунд, чтобы обеспечить более эффективное использование сети. Вы ничего не измеряете, кроме TCP, который специально выполняет то, для чего он предназначен. Если вы внимательно посмотрите на сетевой трафик, вы увидите, что большинство TCP-пакетов на самом деле содержат гораздо больше двух байтов данных.
Вы ожидаете ужасно неэффективного поведения. Отправлять 30 пакетов в секунду, каждый из которых содержит только два байта данных, невероятно глупо, а TCP недостаточно глуп для этого.
Два предложения:
Не называйте это «пингом». Это заставляет людей думать, что это измерение кругового обхода сети, а не измерение времени отклика по TCP.
Не говорите «30 пакетов / с», если вы действительно не измерили сетевой трафик. Когда вы записываете несколько байтов в TCP-соединение, нет никаких оснований ожидать, что они будут соответствовать пакету. Пакеты - это сетевые вещи. Запись в TCP-соединение - это приложение. Путаница в концепциях уровня приложения и сети действительно сбивает вас с толку, когда вы имеете дело с TCP.
Кроме того, почему вы делаете так много небольших записей? Соберите данные в более крупные записи. Да, TCP сделает это за вас, но все равно будет намного эффективнее, если вы сделаете это в своем приложении.
Если вы просто делаете эти ужасные маленькие записи для проверки производительности, просто прекратите это делать. Это не даст вам полезных данных. Если эти ужасные мелкие записи повторяют ваш реальный сценарий использования и время отклика важно, тогда вам нужно поработать над исправлением своего протокола, чтобы он имел какой-то смысл.