在COMET,SOCKETS,SSE中,我觉得服务器发送事件很容易实现
我正在使用tomcat服务器,因此我使用servlet来实现SSE。
但是我在这里遇到了很大的问题并且搜索了很多,但我没有得到任何解决方案。
问题是如果您在 sever sent event
看到基本示例输出每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循环将其作为重复结果。
非常感谢任何帮助
答案 0 :(得分:1)
您链接的示例使用以下代码:
document.getElementById("result").innerHTML += event.data + "<br>";
因此,它将新事件数据附加到result元素的内容中。要替换它,只需将其更改为
document.getElementById("result").innerHTML = event.data + "<br>";
简而言之,您的问题与您在服务器端如何生成事件没有任何关系,而是与您在浏览器中使用事件的方式有关。