#android #сеть #gprs
Eсть клиент-серверное приложение под андроид. Клиент под Android с периодичностью раз в 100 ms отправляет UDP пакет (около 100 байт) на сервер. Одним полем данных пакета является timestamp. Время на клиенте и сервере синхронизировано. В качестве сети используется EDGE мобильного оператора. На сервере каждую секунду сравниваем timestamp полученный от клиента с текущим временем и получаем следующую картину: Время клиента 17:30:01, время сервера 17:30:01 Время клиента 17:30:02, время сервера 17:30:02 Время клиента 17:30:03, время сервера 17:30:04 Время клиента 17:30:04, время сервера 17:30:05 Время клиента 17:30:05, время сервера 17:30:06 Время клиента 17:30:06, время сервера 17:30:07 Время клиента 17:30:07, время сервера 17:30:08 Время клиента 17:30:08, время сервера 17:30:11 Время клиента 17:30:09, время сервера 17:30:11 Время клиента 17:30:10, время сервера 17:30:11 Время клиента 17:30:11, время сервера 17:30:20 Время клиента 17:30:12, время сервера 17:30:20 Время клиента 17:30:13, время сервера 17:30:20 Время клиента 17:30:14, время сервера 17:30:21 Время клиента 17:30:15, время сервера 17:30:22 Время клиента 17:30:16, время сервера 17:30:23 Время клиента 17:30:17, время сервера 17:30:24 Время клиента 17:30:18, время сервера 17:30:25 Время клиента 17:30:19, время сервера 17:30:26 Время клиента 17:30:20, время сервера 17:30:27 Время клиента 17:30:21, время сервера 17:30:28 После возникновения лагов на 8й и 11й секунде пакеты начинают передаваться с 20й секунды. В итоге получаем статическую задержку в получении пакетов в 7 секунд. При последующем возникновении лагов эта задержка существенно возрастает. Притом очередь исходящих сообщений формируется на клиенте, т.к. если клиент отключить от сети запоздавшие пакеты приходить не будут. Ищу ответ как сделать, чтобы сгенерированные пакеты во время лага не отправлялись в сети или не копились в буфере. Нужно получать максима. Пробовал изменять значение SO_SNDBUF в опциях сокета на клиенте вплоть до нуля, но эффекта не было.
Ответы
Ответ 1
Чтобы выявить причину попробуйте использовать тот же клиент по Wi-Fi. Если и по Wi-Fi будет такая же ситуация, значит проблема где-то на уровне вашей программы или системного софта. Если по Wi-Fi задержек не будет, то это будет означать что проблема в работе EDGE, и что вы, скорее всего, не можете её устранить.
Комментариев нет:
Отправить комментарий