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

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

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

Войти через TM ID
Похожие вопросы
Sidenis Томск
До 170 000 руб.
ПАО Совкомбанк Череповец
от 50 000 руб.
RBS Payments Москва
от 140 000 до 200 000 руб.
10 дек. 2018, в 19:30
1000 руб./за проект
10 дек. 2018, в 18:00
50000 руб./за проект