1

我使用 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 分钟一次。可能吗?如果是,如何?

4

2 回答 2

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 。

于 2012-02-28T00:01:08.437 回答
0

由于ContentType,上述解决方案不适用于 Chrome 。

Chrome 期望这样:

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

查找示例谷歌搜索“milestonenext HTML5 Server-Sent Events Sample with Java Servlet as Event Server”

于 2013-07-15T14:13:32.203 回答