Я пишу HTTP-сервис, который может занять довольно много времени для получения результатов. Я использую встроенные Jetty 8.1.5 и JAX-RS (Apache CXF)Как контролировать куски в причале?
Я решил пойти с каким-то контрольным протоколом: когда приходит новый запрос, я запускаю длительную работу в отдельном потоке и периодически пишу HttpOutputStream линии с текущим статусом («CONTROL_MESSAGE: 42% done»)
Проблема в том, что Jetty здесь использует кодировку chunk, поэтому мои сообщения о состоянии буферизуются и бесполезны, поскольку все они могут быть буферизованы в одном блоке, обеспечивая для клиента нет прогресса.
Я не могу использовать свойство Content-Length, так как не знаю длины конечного результата. HttpOutputStream.flush() не работает, поскольку Jetty использует внутренние буферы.
Как я вижу, мне нужен способ сказать «Причал», пожалуйста, закончите текущий кусок и промойте его, но не знаете, как это сделать.
Правда, проблема была на самом деле в Apache CXF, которая имеет ошибку в используемой нами версии, которая просто игнорирует вызовы flush(). – relgames