服务器使用servlet发送事件

时间:2012-02-27 10:58:42

标签: servlets server-sent-events

我使用servlet作为我的服务器将更新发送到我的jsp客户端(使用HTML5 SSE)。这是我的jsp代码

<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分钟一次。可能吗?如果是,怎么样?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

由于 ContentType ,上述解决方案无法与Chrome配合使用。

Chrome预计会:

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

使用Java Servlet作为事件服务器查找示例Google搜索&#34; milestonenext HTML5服务器发送事件示例&#34;