4

When we use AsyncContext mentioned in servlet3 specification, how long do the http connection remains open? My piece of code is

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

It is working! and as the buffer is flushed, content is available in client side.

My question is, how long this connection remains open? and how the server manages it even if there is no keep-alive mentioned in the header?

Prasad Khode
  • 6,602
  • 11
  • 44
  • 59

1 Answers1

0

I got the answer finally. Even if no keep-alive header is present, server maintains a default keep-alive. The connection is open for that period of time. The AsyncContext keep on extending the connection until it is closed manually or it is not sending data to client for more than the keep-alive(mentioned or default) time. So, basically it behaves as a very slow network connection at the client side.