MacOS: странная задержка между пакетами UDP / TCP - PullRequest
0 голосов
/ 21 мая 2011

Я разрабатываю приложение, которое отправляет данные по UDP с помощью класса AsyncUDPSocket другому клиенту на Mac и Windows. Очень важно, чтобы пакеты приходили мгновенно.

Проблема в том, что каждый ок. 1000 пакетов Я получаю задержку около 2 секунд при получении пакетов. Задержка в 100-200 мс будет в порядке, но 2 секунды приводят к ухудшению работы пользователя

У меня связь UDP в отдельном потоке, поэтому он мало зависит от взаимодействия пользователя с пользовательским интерфейсом и тому подобным. Я уже пытался отправлять пакеты быстрее, медленнее, пакеты разных размеров: задержка остается. Пробовал использовать TCP вместо UDP - тот же результат :(

Похоже, что это не происходит в Windows Cliets. Может быть, в MacOS есть какой-то системный буфер, который нужно очищать каждый раз, когда у него есть N пакетов или N байтов данных ??? Кто-нибудь знает, как я могу предотвратить задержку?

1 Ответ

1 голос
/ 21 мая 2011

Есть много вещей, которые могут временно замедлить работу сетевой программы, трудно понять, с чего начать. Вы пробовали это в нескольких сетях? И беспроводные и сетевые сети? Какой у вас переключатель? Это происходит на разных компьютерах с OS X или только на одном? Можете ли вы воспроизвести задержку с помощью более простой программы командной строки? Вы используете сборку мусора? (Хватается за соломинку здесь ...)

Просто из любопытства я протестировал время приема-передачи UDP-эхо-пакетов, отправленных с моего Mac на другой компьютер в той же локальной сети. Из более чем 60 000 пакетов UDP с полезной нагрузкой 1000 байт ни один из них не занимал более 32 мс, среднее время приема-передачи составляло 0,6 мс, а отклонение выборки - 0,21.

(мне также любопытно, зачем вам такая низкая задержка.)

...