Я разрабатываю приложение Android, взаимодействующее с TCP-сервером TCP через соединение WLAN. Приложение Android - это игра, в которой спрайты перемещаются по экрану. Всякий раз, когда спрайт перемещается, AndroidClient отправляет свои координаты на Java-сервер, который затем отправляет данные другим клиентам (максимум 4 клиента). Сервер обрабатывает каждый клиент в отдельном потоке, обновления данных отправляются примерно каждые 20 мс. Каждый пакет состоит из 1-10 байтов. Я нахожусь в сети с 70 Мбит (около 15 Мбит на моей беспроводной сети).Java TCP latency
У меня возникают проблемы с нестабильным подключением и наблюдается латентность около 50-500 мс. каждый 10-й-30-й пакет. Я установил tcpNoDelay в true, который остановил постоянную задержку в 200 мс, хотя он все еще значительно отстает. Поскольку я совершенно новичок и в Android, и в сети, я не знаю, следует ли это ожидать или нет. Мне также интересно, подходит ли UDP для моей программы, так как я заинтересован в отправке обновлений быстрее, чем каждый пакет, поступающий правильно.
Я был бы признателен за любые рекомендации относительно того, как избежать/обойти эту проблему с задержкой. Также будут приветствоваться общие рекомендации о том, как реализовать такую архитектуру клиент-сервер.
UDP определенно звучит как лучший вариант. –
для игры, вы, вероятно, захотите добавить некоторое предсказание (вероятно, вы видели эффект неправильного предсказания в некоторых играх). – ninjalj
Захват сетевой активности с помощью wirehark или tcpdump и отправьте его здесь. – gudok