Я испытываю странное поведение:
У меня есть сервер на основе java ServerSocket, который обслуживает TCP-запросы, отправляемые с устройства iPhone.
Я заметил, что когда я использую iPhone, подключенный через Wi-Fi, нет проблем с сетью. Iphone открывает соединение, а затем записывает и читает из потока, как и должно, без заметной задержки. Все идет нормально.
Однако, работая с 3g, я испытываю задержку в 1,5 секунды со второй отправки первого сообщения до полного возвращения ответа. Кажется, что первый байт сообщения читается сразу после того, как сервер сбрасывает сообщение в сокет, но остальная часть сообщения задерживается примерно на секунду (!).
Я проверил это поведение сети, напечатав размер буфера, который хранится на стороне iphone, и наблюдая за сетью с помощью wireshark на стороне сервера.
Wireshark также показывает это - первый байт отправляется с размером сообщения в 1 байт (всегда 0 BTW), а остальная часть сообщения отправляется впоследствии, в одном или нескольких больших сообщениях (~ 1300 байт).
Сообщение состоит из 8-байтового заголовка (2 целых числа - тип и размер) и тела этого размера.
Действительно странная вещь заключается в том, что написание аналогичного сервера, использующего тот же протокол в c ++ (с использованием poco-сервера), работает отлично.
Я использую DataOutputStream сокета для записи заголовка, используя 2 инструкции writeInt и запись (byte []), которая записывает тело. Затем я смываю поток.
Кто-нибудь знает, есть ли опция сокета (в java), которая может вызывать такого рода поведение?
Любая помощь будет оценена.