Написах java REST (поточно предаване) сървлет с помощта на Apache CXF 2.5.1 и го внедрих в контейнер Tomcat 7.0.42. Крайната точка REST по същество е имплементация на StreamingOutput го обви в Response обект, който се предава на контейнера, когато клиент поиска.
Естеството на услугата е да върне поток от сензорни данни на клиент. Този поток теоретично може да бъде безкрайно дълъг, защото се прекратява само когато клиентът прекъсне връзката. Проблемът възниква, когато данните, генерирани от сензора, идват в малки количества.
Услугата „работи“, но се натъквам на проблем, когато става въпрос за размера на отговорите на данните, които клиентът получава. Клиентът получава данни само след като прагът от 8192 байта е надхвърлен от услугата. След това клиентът получава 800 байта, след това 8192 байта, след това 800 байта...
Бих искал данните да бъдат изпратени на клиента веднага щом извикам flush на OutputStream, който контейнерът предава на моята реализация на StreamingOutput. Въпреки това, изпълнението на OutputStream, което ми е дадено (WrappedOutputStream, дефинирано в org.apache.cxf.transport.http.AbstractHTTPDestination) има метод за промиване, който не прави нищо.
Има ли някакъв начин да имам повече контрол върху OutputStream, който CXF използва, за да мога да „промивам“ към клиента при поискване?