2016-02-15 5 views
4

Когда мы используем AsyncContext, упомянутый в спецификации servlet3, как долго HTTP-соединение остается открытым? Мой фрагмент кодаКогда мы используем AsyncContext, упомянутый в спецификации servlet3, как долго HTTP-соединение остается открытым?

final AsyncContext asyncContext = httpServletRequest.startAsync(); 
asyncContext.setTimeout(0); 
asyncContexts.offer(asyncContext); 
.... 
.... 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       final BufferedReader read = facade.getStreamData(); 
       while (read.ready()) { 
        httpServletResponse.setContentType("text/html"); 
        if(i 100) { 
         asyncContext.complete(); 
        } 
        if(Strings.isNullOrEmpty(read.readLine())) { 
         continue; 
        } 
        asyncContext.getResponse().getWriter().print(read.readLine()); 
        asyncContext.getResponse().flushBuffer(); 
        i = i + 10; 
        Thread.sleep(2000); 
       } 
       asyncContext.getResponse().getWriter().print("#" + 100); 
       asyncContext.getResponse().flushBuffer(); 
       asyncContext.complete(); 
      } catch (IOException e) { 
       throw new RuntimeException(
           "Error when writing the event.", e); 
      } catch (InterruptedException e) { 
       throw new RuntimeException(
         "Error when writing the event.", e); 
      } 
     } }).start(); 

Он работает! и при буфере буфера содержимое доступно на стороне клиента.

Мой вопрос: Как долго эта связь остается открытой?? и как сервер управляет им, даже если в заголовке нет ссылки на живое существо?

ответ

0

Наконец-то я получил ответ. Даже если заголовок keep-alive отсутствует, сервер поддерживает сохранение по умолчанию. Соединение открыто для этого периода времени. AsyncContext продолжает расширять соединение до тех пор, пока он не будет закрыт вручную или не будет отправлять данные клиенту больше, чем время сохранения (указанное или по умолчанию). Таким образом, в основном это ведет себя как очень медленное сетевое соединение на стороне клиента.