2012-02-27 131 views
1

我正在使用servlet作爲我的服務器向我的jsp客戶端發送更新(使用HTML5 SSE)。這是我的jsp代碼服務器使用servlet發送事件

<script type="text/javascript"> 

    if(typeof(EventSource)!=="undefined") 
     { 
     var source=new EventSource("server"); 
     source.onmessage=function(event) 
     { 
     document.getElementById("news1").innerHTML+=event.data + "<br />"; 
     }; 
     } 
    else 
     { 
     document.getElementById("news1").innerHTML="Sorry, your browser does not support server-sent events..."; 
     } 
     </script> 

這是我的servlet doGet方法。

response.setContentType("text/event-stream"); 

     PrintWriter out = response.getWriter(); 

     int messagesSent = 0; 

      out.print("data: {" + messagesSent++ + "}\n\n"); 
      out.flush(); 
      out.close(); 

這工作正常,服務器默認情況下每3秒發送一次更新。我想每10分鐘更換一次。可能嗎?如果是,如何?

+0

你有沒有試過在服務器端關閉流,並每10分鐘向這個流發送一條消息? – 2012-02-27 12:40:50

回答

2

在你的迴應,你需要用超時以毫秒爲單位

發送retry:因此,你doGet應該是這樣的....

response.setContentType("text/event-stream"); 

PrintWriter out = response.getWriter(); 

int messagesSent = 0; 

out.print("retry: 600000\n"); //set the timeout to 10 mins in milliseconds 
out.print("data: {" + messagesSent++ + "}\n\n"); 
out.flush(); 
out.close(); 

更多信息所涉及的EventSource的對象見HTML5Rocks.com

0

上述解決方案不適用於Chrome,因爲ContentType

鉻預計這樣的:

response.setContentType("text/event-stream;charset=UTF-8"); 

查找樣本谷歌搜索「milestonenext HTML5服務器發送的事件樣本與Java servlet作爲事件服務器」