2016-11-13 84 views
0

我有一個服務器可以通過長期HTTP響應來傳輸各種東西,如日誌輸出。但是,在使用Jetty的代理Servlet時,我無法獲得流式傳輸響應(它會在發送前緩存整個響應)。使用Jetty流式傳輸HTTP響應AsyncProxyServlet

使用覆蓋一個普通ProxyServlet類,下面似乎工作:

@Override 
protected void onResponseContent(HttpServletRequest request, HttpServletResponse response, Response proxyResponse, byte[] buffer, int offset, int length, Callback callback) { 
    super.onResponseContent(request, response, proxyResponse, buffer, offset, length, callback); 
    try { 
     response.getOutputStream().flush(); 
    } catch (IOException e) { 
     log.warn("Error flushing", e); 
    } 
} 

然而,這樣做,覆蓋當AsyncProxyServlet不起作用。 (完整的源代碼here

於是,兩個問題:

  1. 當使用ProxyServlet後的內容每一位收到要走的路,正在清除?
  2. 有沒有辦法讓它與AsyncProxyServlet一起使用?

回答

1

得到它的工作。無論是否使用異步,正確的方法都可以工作,即在創建Jetty服務器連接器時設置輸出緩衝區大小。

HttpConfiguration httpConfig = new HttpConfiguration(); 
httpConfig.setOutputBufferSize(1024); 
ServerConnector httpConnector = new ServerConnector(jettyServer, 
     new HttpConnectionFactory(httpConfig)); 

默認值是32768

(注:無需重寫onResponseContent方法)