在HTTP Streaming servlet中为每个请求实现线程

时间:2014-01-10 21:59:34

标签: java servlets push-notification http-streaming

我正在实现HTTP Streaming servlet以向客户端发送推送通知。在该容器中还有Jersey JAX-RS REST服务。

问题是当我在两个浏览器窗口中打开流时,我必须等到另一个请求完成。

我读了类似的话题 Servlet seems to handle multiple concurrent browser requests synchronously并在流中的两个不同浏览器中打开流并使其正常工作。

我尝试使用AsyncContext,但它不流,它允许同时打开浏览器标签,并在执行结束时将所有内容传递给浏览器。

此外,我尝试在两个浏览器选项卡中同时打开示例JSP页面,并得到类似的结果。

    <HTML>
    <HEAD>
       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
       <meta http-equiv="Pragma" content="no-cache">
    </HEAD>
    <BODY BGCOLOR="blue" TEXT="white">
    <% 
      try {
        for (int i=1; i < 100; i++) {
           out.print("<h1>"+i+"</h1>");
           out.flush();

           try {
                Thread.sleep(1000);
           } catch (InterruptedException e) {
                out.print("<h1>"+e+"</h1>");
           }
         }
       } catch (Exception e) {
           out.print("<h1>"+e+"</h1>");
       }
       out.print("<h1>DONE</h1>");
    %>
    </BODY>
    </HTML>

作为服务器,我正在使用Apache Tomcat 7.0。但是使用另一个servlet容器不会有问题。

任何指针?

由于

1 个答案:

答案 0 :(得分:0)

从servlet容器中进行自己的线程管理几乎不是一个好主意。

对于Tomcat中的服务器推送,请参阅此处:http://tomcat.apache.org/tomcat-7.0-doc/aio.html

你确定客户端轮询不会更容易吗?