2013-09-24 2 views
3

Я использую HTTP-сервер Джерси, а также клиент Джерси для запросов REST.Джерси длинный запрос времени ожидания

Клиент отправляет файл на сервер, сервер обрабатывает файл и возвращает ответ клиенту. Моя проблема в том, что обработка на сервере может занять несколько минут, может быть, даже 1/2 часа.

Я хочу, чтобы клиент знал, не получилось или не удалось выполнить запрос. Однако я установил свой readTimeout на клиенте до 60-х, потому что я читал, что это плохая практика, чтобы установить его на 0. В результате я иногда получаю на клиенте SocketTimeoutException.

Безопасно ли отключить readTimeout (установить его в 0)? В ConnectTimeout все равно будет 10 секунд.

В качестве альтернативы можно ли использовать протокол TCP в режиме реального времени? Как я понял, это только посылает эти пакеты в больших интервалах из-за нескольких минут (в зависимости от ОС).

Есть ли что-нибудь еще, что я мог бы сделать вместо того, чтобы немедленно возвращаться с токеном, а затем опросить сервер с помощью токена, если обработка прошла успешно? Я кое-что прочитал о пакетах пульса. Можно ли это использовать?

ответ

1

Очевидно, что вы не должны устанавливать слишком высокий тайм-аут, так как это поддерживает ожидание потока. После нескольких запросов у вас будет много ожидающих потоков и приведет к заклиниванию сервера.

Вместо этого, если опрос сервера для проверки готовности запроса не является чем-то, что вы хотите сделать, я бы предложил вам включить какой-то идентификатор с запросом и вернуть серверу ответ, когда его готовый с включенным соответствующим идентификатором, затем соответствует запросу и ответу на стороне клиента.

+0

И как я узнаю, когда сервер будет готов? Это потребует повторного опроса. – Bantak

Смежные вопросы