在 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 循环使其成为重复的结果。
非常感谢您的帮助