2016-02-15 2 views
4

Lorsque nous utilisons AsyncContext dans la spécification servlet3, combien de temps la connexion http reste-t-elle ouverte? Mon morceau de code estLorsque nous utilisons AsyncContext dans la spécification servlet3, combien de temps la connexion http reste-t-elle ouverte?

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(); 

Il travaille! et comme le tampon est vidé, le contenu est disponible côté client.

Ma question est, combien de temps cette connexion reste ouverte? et comment le serveur le gère même s'il n'y a pas de keep-alive mentionné dans l'en-tête?

Répondre

0

J'ai enfin trouvé la réponse. Même si aucun en-tête keep-alive n'est présent, le serveur maintient un keep-alive par défaut. La connexion est ouverte pour cette période. L'AsyncContext continue à étendre la connexion jusqu'à ce qu'il soit fermé manuellement ou qu'il n'envoie pas de données au client pour plus que l'heure de conservation (mentionnée ou par défaut). Donc, fondamentalement, il se comporte comme une connexion réseau très lente du côté client.