2017-02-14 4 views
0

현재 StreamingOutput API와 함께 MSF4J를 사용하려고합니다. 그러나 File을 스트리밍하는 대신 일련의 끝이없는 짧은 문자열/텍스트를 스트리밍하려고합니다. 문자열이 클라이언트에 즉시 플러시되기를 원합니다. 그러나, 클라이언트는 플러시 후에 그것을 얻지 못하고있다. 내 문자열이 청크에 잠시 후에 플러시되기 때문에 그것이 기본 8kb 버퍼로 인해 믿습니다. glassfish에서와 같은 방법으로이 기본 버퍼를 재정의하려면 어떻게합니까? https://jersey.java.net/apidocs/2.22/jersey/org/glassfish/jersey/server/ServerProperties.html#OUTBOUND_CONTENT_LENGTH_BUFFERwso2 msf4j : 서버 속성을 구성하는 방법

내가 원하는 뭔가 같은 ...

Properties properties = new Properties() 
properties.set("jersey.config.server.contentLength.buffer", 0);** 

new MicroservicesRunner() 
    .setProperties(properties)** 
    .addInterceptor(new HTTPMonitoringInterceptor()) 
    .deploy(new MyService()) 
    .start(); 

내 streamingout 클래스

new StreamingOutput(){  
    public void write(OutputStream os) throws IOException, WebApplicationException  { 
     while(true){ 
      os.write("some string".getBytes()); 
      os.flush(); 
     }  
     } 
} 

당신을 감사합니다.

+0

그래서 문자열은 즉시 fluse가되지만 int 값은 그렇지 않습니다. –

+0

@ThusithaThilinaDayaratne, 정수는 REST를 통해 반환 될 때 문자열로 처리됩니다. 플러시를하더라도 클라이언트는 8kb 버퍼가 소비 될 때까지 문자열을 즉시받지 못합니다. – Speng

+0

전체 서비스를 공유 할 수 있습니까? –

답변

1

이것은 전체 코드입니다. 작동하지만 서버 속성을 무시할 수있는 방법이 필요합니다.

properties.set ("jersey.config.server.contentLength.buffer", 0); 덕분에 .

패키지 ph.sample.api.ms;

import org.wso2.msf4j.MicroservicesRunner; import org.wso2.msf4j.analytics.httpmonitoring.HTTPMonitoringInterceptor;

Public 클래스 출원 { 공공 정적 무효 메인 (문자열 []에 args) {

new MicroservicesRunner(9000) 
      .addInterceptor(new HTTPMonitoringInterceptor()) 
      .deploy(new StreamService()) 
      .start(); 
} } 

패키지 ph.sample.api.ms;

import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response;

import org.wso2.carbon.metrics.core.annotation.Timed; 가져 오기 java.io.IOException; import java.io.OutputStream;

import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.StreamingOutput;

@Path ("/ 스트림") 공용 클래스 StreamService { @GET @Path ("/ 등록") 이 @Timed 공공 응답() {

return Response.ok(new StreamingOutput(){ 
     @Override   
     public void write(OutputStream os) throws IOException, WebApplicationException { 
     while(true){ 
      os.write("some string".getBytes()); 
      os.flush(); 
     }    
     } 
    }).build(); 
} 

}

가입
+0

질문을 업데이트하십시오. 대답으로 게시하지 마십시오 –

+0

요구 사항에 따라 버퍼 크기를 변경할 수 있습니다./샘플을 참조하십시오. https://github.com/wso2/msf4j/blob/master/samples/fileserver/src/main/java/org/ wso2/msf4j/example/FileServer.java # L110 –