Tôi đã thử nghiệm HttpResponse#flushBuffer
và PrintWriter#flush
trên Tomcat 7
bên dưới, nhưng có vẻ như phản hồi thay vì bỏ qua chúng hơn là xóa nội dung trên dây asap như mong đợi.Tomcat không xóa bộ đệm phản hồi
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");
}
}
Máy rút tiền hiển thị "hi" và "tạm biệt" với nhau sau khi trì hoãn. Đó có phải là hành vi sai trái hoặc dự định không?
@EDIT
Theo đề nghị @Tomasz Nurkiewicz
's, tôi đã kiểm tra một lần nữa với curl
sau đó vấn đề này đã biến mất. Dường như các trình duyệt chuẩn và gói tcp/ip monitor
small pieces of contents
từ cùng một phản hồi http để hiển thị chúng cùng nhau.
@EDIT 2
Nó cũng quan sát thấy rằng cả hai HttpResponse#flushBuffer
và PrintWriter#flush
ổ Tomcat 7
để gửi cho khách hàng chunked data.
Tôi tin rằng đó là cấu hình máy chủ ứng dụng. Vui lòng xem [bài đăng của tôi] (http://stackoverflow.com/questions/43453508/end-to-end-reactive-streaming-restful-service). –