gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:01:06 26 4
gpt4 key购买 nike

在COMET,SOCKETS,SSE中我觉得server send events比较容易实现。
我正在使用 tomcat 服务器,所以我使用 servlet 来实现 SSE。

但是我在这里遇到了一个大问题,并且进行了很多搜索,但我没有找到任何解决方案。

问题是如果您在 sever sent event 看到基本示例

输出每 4 秒重复一次,我们不能在同一行更改输出吗?
详细说明:
4 秒后,新的更新结果打印在先前输出的下一行中,
我希望它打印在先前输出的同一行中(覆盖先前输出)
它应该看起来像一个数字 watch 。

我的 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("result").innerHTML = event.data + "<br>";

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

关于java - 停止服务器发送事件中的重复输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com