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