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

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

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

Войти через центр авторизации
Похожие вопросы