繁体   English   中英

兼容性测试套件中“while(inputStream.read()) >=0)”的用途是什么?

[英]What is intended for "while(inputStream.read()) >=0)" in Compatibility Test Suite?

我发现我的项目在使用 CTS(兼容性测试套件)进行测试的过程中意外卡住了 30 秒。 这是 CTS 中com.sun.ts.tests.servlet.api.jakarta_servlet_http.httpservletrequest40的代码( 原始来源链接

    try {
      url = new URL("http://" + hostname + ":" + portnum + CONTEXT_ROOT
          + "/TrailerTestServlet");
      socket = new Socket(url.getHost(), url.getPort());
      socket.setKeepAlive(true);
      output = socket.getOutputStream();

      String path = url.getPath();
      StringBuffer outputBuffer = new StringBuffer();
      outputBuffer.append("POST " + path + " HTTP/1.1" + DELIMITER);
      outputBuffer.append("Host: " + url.getHost() + DELIMITER);
      outputBuffer.append("Connection: keep-alive" + DELIMITER);
      outputBuffer.append("Content-Type: text/plain" + DELIMITER);
      ...

      byte[] outputBytes = outputBuffer.toString().getBytes(ENCODING);
      output.write(outputBytes);
      output.flush();

      input = socket.getInputStream();
      ByteArrayOutputStream bytes = new ByteArrayOutputStream();
      int read = 0;
      **while ((read = input.read()) >= 0)** {
        bytes.write(read);
      }
      String response = new String(bytes.toByteArray());

如标题中所述,在服务器(我的代码)完成对该请求的响应后,线程在“while((read = input.read()) >= 0)”处被阻塞。 在我的理解中,请求包括“Connection: keep-alive”,服务器在响应后不关闭此连接,最终在(服务器端)SocketTimeout 中关闭连接。

我认为此流程似乎是合理的,因为请求说“保持此连接处于活动状态”并且它不会让 input.read() 在 SocketTimeout 或任何异常之前到达 stream 的末尾。

回到我的问题。“while(inputStream.read()) >=0)”和“keep-alive”的目的是什么?

谢谢。

我从 github( https://github.com/jakartaee/platform-tck/blame/484ce8691c41dde5ab2648f1c9e056487c36775c/src/com/sun/ts/tests/servlet/api/jakarta_servlet_java0/#servlet29/#servlet29 ) 却找不到合理的理由。

你是对的。 此循环等待服务器关闭连接,但服务器已被告知如果可能请不要关闭连接。 这显然是一个错误,或者超时可能是有意的,而且它是非常懒惰的编码。

但是,这看起来像是针对特定 web 服务器的测试代码,因此服务器上的某些内容可能会阻止连接保持活动状态。 如果客户端服务器需要,连接将在第一次请求和响应后关闭。 我在TrailerTestServlet 中看不到任何会强制服务器关闭连接的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM