@relgames
Java Developer

Как отключить буферизацию в Jetty?

Разрабатываю REST HTTP API, некоторые вызовы работают довольно долго (часы), возникла потребность в контрольном протоколе.

Планировал так: запустить в фоне задачу, периодически писать в HttpOutputStream строки вида CONTROL_MESSAGE:Status 42%, в клиенте их читать и выводить на экран.

По факту, наткнулся на неприятный момент: Embedded Jetty 8.1.5 буферизирует вывод, flush() не помогает.
На so пишут, что дело в chunk encoding, попытался его обойти через Connection: close и setContentLength(MAX_INT), не работает.

Что-то я упускаю, ведь должно ведь работать? Как-то ведь Comet работает через http streaming, там точно такая же задача — периодически писать в HttpOutputStream, но там сообщения доставляются сразу же. Или я не так понимаю технологию?

UPD похоже, мне нужно как-то вручную разбивать сообщения на куски (chunks), но пока не ясно как.
  • Вопрос задан
  • 2975 просмотров
Решения вопроса 1
@relgames Автор вопроса
Java Developer
В общем, как оказалось, проблема была не в Jetty, а в Apache CXF.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@1nd1go
Вроде Transfer-encoding: chuncked и setContentLength() не должны быть вместе, т.е. если второе есть, то подразумевается, что это не chuncked.

Тогда, соответственно вы посылаете какой-то буфер в outputStream и делаете flush. Можно еще еще rest.setBufferSize() для определения размера chunk'а.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽