2013-12-20 32 views
1

我想實現HTML 5 SSE功能打開。爲此,我需要保持響應流持續很長時間。現在我的實現如下。飼養的servlet流而不會阻塞線程工作

@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小時。我知道暫停線程不是好方法。

我想知道有沒有更好的,爲什麼在那裏我可以保持打開的PrintWriter返回甚至調用servlet的後?或者有什麼不同的方法來達到這個效果?

+1

退房的Servlet 3.0 [異步Servlet的功能(http://www.javacodegeeks.com/2013/08/async-servlet-feature-of-servlet-3.html) 。 –

+0

@SotiriosDelimanolis看起來像這樣會有所幫助。將嘗試一下。 –

回答

0

Here你會發現示例應用程序(HTML + Servlet的),這可能會滿足您的要求。

您還可以使用WebSockets

+0

實際上提到的代碼有效。我已經使用您提供的相同鏈接準備了我的代碼([this](http://viralpatel.net/blogs/html5-server-sent-events-java-servlets-example/))。我想通過不使用Thread.sleep()來提高效率。 –