Java 停止服务器发送事件中的重复输出

Java 停止服务器发送事件中的重复输出,java,tomcat,servlets,server-sent-events,Java,Tomcat,Servlets,Server Sent Events,在COMET、SOCKETS、SSE中,我觉得服务器发送的事件很容易实现。 我正在使用tomcat服务器,所以我使用servlet来实现SSE。 但我在这里面临着一个大问题,搜索了很多,但我没有找到任何解决方案。 问题是如果您在 输出每4秒重复一次,我们不能在同一行中更改输出。 详细信息: 4秒后,一个新的更新结果将打印在上一输出的下一行中, 我希望它打印在上一次输出的同一行中(在上一次输出上重写)并且它应该看起来像一块数字手表。 我的servlet代码是这样的,我必须做什么样的更改 imp

在COMET、SOCKETS、SSE中,我觉得服务器发送的事件很容易实现。
我正在使用tomcat服务器,所以我使用servlet来实现SSE。

但我在这里面临着一个大问题,搜索了很多,但我没有找到任何解决方案。

问题是如果您在

输出每4秒重复一次,我们不能在同一行中更改输出。
详细信息:
4秒后,一个新的更新结果将打印在上一输出的下一行中,
我希望它打印在上一次输出的同一行中(在上一次输出上重写)
并且它应该看起来像一块数字手表。

我的servlet代码是这样的,我必须做什么样的更改

  import java.io.IOException;
  import java.io.PrintWriter;
  import java.util.Date;
  import javax.servlet.ServletException;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @WebServlet("/SseServer")
  public class SseServer extends HttpServlet {
  private static final long serialVersionUID = 1L;
  protected void doGet(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
  doPost(request, response);
  }

  protected void doPost(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
  response.setContentType("text/event-stream;charset=UTF-8");
  response.setHeader("Cache-Control", "no-cache");
  response.setHeader("Connection", "keep-alive");

  PrintWriter out = response.getWriter();

  while (true) {
     out.print("id: " + "ServerTime" + "\n");
     out.print("data: " + new Date().toLocaleString() + "\n\n");
     out.flush();
     try {
            Thread.currentThread().sleep(4000);
       } catch (InterruptedException e) {
          e.printStackTrace();
          }
    }
 }

}
我认为使用while循环会使它成为一个重复的结果。


非常感谢您的帮助

您链接到的示例使用以下代码:

document.getElementById("result").innerHTML += event.data + "<br>";
document.getElementById(“结果”).innerHTML+=event.data+“
”;
因此,它将新事件数据附加到结果元素的内容中。要替换它,只需将其更改为

document.getElementById("result").innerHTML = event.data + "<br>";
document.getElementById(“结果”).innerHTML=event.data+“
”;

简而言之,您的问题与您如何在服务器端生成事件无关,而是与您如何在浏览器中使用事件有关。

我正在寻找几天前的答案。非常感谢!这似乎是我的dum:p