Apache CXF 2.5.1을 사용하여 Java REST (스트리밍) 서블릿을 작성하고이를 Tomcat 7.0.42 컨테이너에 전개했습니다. REST 끝점은 기본적으로 StreamingOutput의 구현이며 클라이언트 요청시 컨테이너에 전달되는 Response 개체를 래핑합니다.청크 인코딩을 사용할 때 데이터를 버퍼링하는 CXF
서비스의 성격은 센서 데이터 스트림을 클라이언트로 반환하는 것입니다. 이 스트림은 클라이언트가 연결을 끊을 때만 종료되므로 이론적으로 무한대로 길 수 있습니다. 이 문제는 센서에 의해 생성 된 데이터가 소량으로 제공 될 때 발생합니다.
서비스는 작동하지만 클라이언트가받는 데이터 응답의 크기와 관련하여 문제가 발생합니다. 클라이언트는 8192 바이트 임계 값이 서비스에 의해 손상된 후에 만 데이터를 수신합니다. 그런 다음 클라이언트는 800 바이트를 수신 한 다음 8192 바이트를받은 다음 800 바이트를 수신합니다.
컨테이너가 내 구현에 전달하는 OutputStream을 플러시하는 즉시 클라이언트에 데이터를 보내고 싶습니다. StreamingOutput. 그러나, 주어진 된 OutputStream 구현 (org.apache.cxf.transport.http.AbstractHTTPDestination에 정의 된 WrappedOutputStream)에는 아무 것도 수행하지 않는 flush 메서드가 있습니다.
CXF가 사용하는 OutputStream을 제어 할 수있는 방법이 있습니까? 필요에 따라 클라이언트에 "플러시"할 수 있습니까?
좋은 발견! 결함을 생성하고 CXF 커뮤니티에 패치를 제공하여 어떻게 반응하는지 확인해야합니다. https://issues.apache.org/jira/browse/CXF –