Servlets 保持servlet流开放而不阻塞工作线程

Servlets 保持servlet流开放而不阻塞工作线程,servlets,server-sent-events,java-ee-7,Servlets,Server Sent Events,Java Ee 7,我正在尝试实现HTML5SSE特性。为此,我需要长时间保持响应流打开。现在我的实现如下 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/event-stream"); resp.setCharacterEncoding("UTF-8")

我正在尝试实现HTML5SSE特性。为此,我需要长时间保持响应流打开。现在我的实现如下

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


    resp.setContentType("text/event-stream");
    resp.setCharacterEncoding("UTF-8");
    PrintWriter pw = resp.getWriter();

    Broadcaster.add(pw);

    try {
        Thread.sleep(1000*60*60);
    } catch (InterruptedException ex) {
        Logger.getLogger(TestServelet.class.getName()).log(Level.SEVERE, null, ex);
    }
    Broadcaster.remove(pw);
}
我把上面的代码改成线程睡眠1小时,这样我就可以让PrintWriter打开1小时。我知道挂线不是好方法

我想知道有没有更好的方法,为什么即使在返回对servlet的调用之后,我仍然可以保持PrintWriter打开?或者有什么不同的方法可以达到这种效果吗?

您会发现示例应用程序(HTML+servlet)可能会满足您的需求


您也可以使用

查看Servlet 3.0。@SotiriosDelimanolis看起来会有所帮助。我将尝试一下。实际上,问题中提到的代码是有效的。我使用您提供的相同链接()编写了代码。我想通过不使用Thread.sleep()来提高效率。