LINUX.ORG.RU

Сообщения A_Klinsky

 

Как устранить возрастающую задержку при отправке данных через EDGE (2G)?

Вопрос к гуру клиент-серверных приложений для мобильных сетей. 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 в опциях сокета на клиенте вплоть до нуля, но эффекта небыло.

 , ,

A_Klinsky
()

RSS подписка на новые темы