Клиент longpoll / comet на основе JVM: маршрутизаторы убивают неактивные соединения - PullRequest
2 голосов
/ 30 августа 2011

В настоящее время у меня есть сетевой клиент на основе JVM, который выполняет длинный запрос HTTP (он же комета) с использованием стандартного java.net.HttpURLConnection. У меня установлено очень большое время ожидания для соединения (1 час). Для большинства пользователей это работает нормально. Но некоторые пользователи не получают данные, отправленные с сервера, и в конечном итоге время ожидания истекает через час.

Моя теория заключается в том, что (NAT) маршрутизатор рассчитывает время ожидания и отбрасывает свои соединения, потому что они слишком долго простаивают, прежде чем сервер отправит какие-либо данные.

Мои вопросы:

Можно ли включить поддержку активности TCP для соединений, используемых java.net.HttpURLConnection? Я не мог найти способ сделать это.

Есть ли другой API (чем HttpURLConnection), который я должен использовать вместо этого?

Другие решения?

Ответы [ 2 ]

1 голос
/ 30 августа 2011

java.net.HttpURLConnection обрабатывает Keep-Alive заголовок прозрачно , им можно управлять, и по умолчанию оно на . Но ваша проблема не в Keep-Alive, который является флагом более высокого уровня, указывающим, что сервер должен закрыть соединение после обработки первого запроса, а скорее ожидания следующего.

В вашем случае, вероятно, что-то на нижнем уровне стека OSI прерывает соединение. Поскольку сохранение открытого, но бездействующего TCP-соединения в течение такого длительного периода времени никогда не является хорошим выбором (протокол FTP с двумя открытыми соединениями: одно для команд и одно для данных имеет одну и ту же проблему), я бы предпочел реализовать своего рода отключение повторите отказоустойчивую процедуру на стороне клиента.

На самом деле безопасный предел, вероятно, будет всего несколько минут, а не часов. Просто отключайтесь от HTTP-сервера каждые 60 секунд или 5 минут. Должен сделать свое дело.

0 голосов
/ 14 января 2012

Похоже, нет способа включить поддержку активности TCP для HttpURLConnection.

Apache HttpComponents будет вариантом, когда выйдет версия 4.2 с поддержкой поддержки активности TCP.

...