Я протестировал HttpResponse#flushBuffer
и PrintWriter#flush
на Tomcat 7
ниже, но казалось, что ответ скорее проигнорировал их, чем спрятал содержимое поверх провода как можно скорее.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("say hi now");
pw.flush();
response.flushBuffer();
try {
Thread.sleep(5000);
} catch (Exception e) {
}
pw.println("say bye in 5 seconds");
}
}
Браузер отображал«Привет» и «пока» вместе после задержки.Это неправильное поведение или намеренное?
@ EDIT
В соответствии с предложением @Tomasz Nurkiewicz
, я снова протестировал с curl
, после чего проблема исчезла.Кажется, что стандартные браузеры и tcp/ip monitor
упаковывают small pieces of contents
из одного и того же ответа HTTP, чтобы отобразить их вместе.
@ EDIT 2
Также замечено, что и HttpResponse#flushBuffer
, и PrintWriter#flush
приводят Tomcat 7
для отправки клиенту фрагментированных данных .