Java 在HTTP流式servlet中实现每个请求的线程

Java 在HTTP流式servlet中实现每个请求的线程,java,servlets,push-notification,http-streaming,Java,Servlets,Push Notification,Http Streaming,我正在实现HTTP流式servlet,以向客户端发送推送通知。在该容器中还有Jersey JAX-RS REST服务 问题是,当我在两个浏览器窗口中打开流时,我必须等待另一个请求完成 我读过类似的话题 并在两种不同的浏览器中打开了该流——流,并使其正常工作 我尝试使用AsyncContext,但它不是stream,它允许同时打开浏览器选项卡,并在执行结束时线程将所有内容交付给浏览器 我还尝试在两个浏览器选项卡中同时打开示例JSP页面,得到了类似的结果 <HTML> &

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

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

我读过类似的话题 并在两种不同的浏览器中打开了该流——流,并使其正常工作

我尝试使用AsyncContext,但它不是stream,它允许同时打开浏览器选项卡,并在执行结束时线程将所有内容交付给浏览器

我还尝试在两个浏览器选项卡中同时打开示例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>

作为服务器,我使用ApacheTomcat7.0。但是使用另一个servlet容器不会有问题

有什么建议吗


谢谢

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

有关服务器推入式Tomcat,请参见此处:


但是,您确定客户端轮询不会更容易吗?

是因为Thread.sleep()正在停止整个Servlet线程吗?我已经按照指令完成了,删除了doGet方法并实现了CometProcessor接口,删除了infinite while循环并设置了NIO连接器而不是默认的HTTP。实现的事件方法如下:public void event(CometEvent event)抛出IOException,ServletException{if(event.getEventType()==CometEvent.EventType.BEGIN){这是我的订阅逻辑…}}它可以工作,但没有改变。