Server-Sent Event实现实时数据交互前后端代码
时间: 2023-12-24 20:05:56 浏览: 198
ChatGPT采用的Server-sent events后端实时推送协议Python3.10实现,基于Tornado6.1 逐句
以下是使用Java Servlet实现Server-Sent Event实时数据交互的前后端代码示例:
前端代码(HTML/JavaScript):
```html
<!DOCTYPE html>
<html>
<head>
<title>Server-Sent Event</title>
</head>
<body>
<h1>Server-Sent Event</h1>
<div id="sse"></div>
<script>
var sse = new EventSource("data"); // 创建EventSource对象,指定服务器地址为"data"
sse.onmessage = function(event) { // 接收服务器推送的消息,并将消息显示在页面上
document.getElementById("sse").innerHTML += event.data + "<br>";
};
</script>
</body>
</html>
```
后端代码(Java Servlet):
```java
import java.io.IOException;
import java.time.LocalTime;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DataServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/event-stream"); // 设置响应内容类型为"text/event-stream"
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache"); // 禁用缓存
while (true) {
String data = "Current time: " + LocalTime.now(); // 获取当前时间并构造消息
response.getWriter().write("data: " + data + "\n\n"); // 将消息写入响应
response.flushBuffer(); // 刷新缓冲区,立即发送响应
try {
Thread.sleep(1000); // 等待1秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在上述代码中,当浏览器向服务器发送请求时,服务器返回的响应内容类型为"text/event-stream",表示服务器将推送事件流给浏览器。在服务器端,通过response.getWriter()方法获取响应输出流,并将消息写入响应体,使用"\n\n"表示消息结束。在浏览器端,通过EventSource对象接收服务器推送的消息,并将消息显示在页面上。
以上代码仅作为示例,实际应用中需要根据具体业务需求进行修改。
阅读全文