2016-11-13 2 views
0

У меня есть сервер, который передает различные данные, такие как вывод журнала по долговечным HTTP-ответам. Тем не менее, при использовании сервлета-прокси Jetty я не смог заставить его передать ответ (он отбрасывает весь ответ перед отправкой).Потоковые HTTP-ответы с Jetty 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

Got it working. Правильный подход работает, независимо от того, используется или не используется асинхронный режим, который должен установить размер выходного буфера при создании соединителей сервера Jetty.

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

по умолчанию 32768.

(Примечание: нет необходимости переопределить метод onResponseContent)

 Смежные вопросы

  • Нет связанных вопросов^_^