java eventsource_利用EventSource对象实现服务器推送(java servlet)
时间: 2024-02-24 20:00:21 浏览: 86
推送服务器端
5星 · 资源好评率100%
可以使用EventSource对象来实现服务器推送,以下是一个Java Servlet的示例代码:
```java
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SSEServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/event-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
while (true) {
String message = "data: " + new Date().toString() + "\n\n";
response.getWriter().write(message);
response.flushBuffer();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,我们设置了响应的Content-Type为text/event-stream,这样浏览器会知道这是一个Server-Sent Events流。然后我们使用response.getWriter()来输出消息,每个消息都以data:开头,以\n\n结尾,这样浏览器就知道如何解析这些消息。
我们使用一个死循环来不断发送消息,每隔一秒发送一次。需要注意的是,在服务端不要关闭连接,因为浏览器需要不断接收消息。最后,我们在response.flushBuffer()之后使用Thread.sleep()来让线程休眠一秒钟,这样就能实现每隔一秒钟发送一次消息的效果。
阅读全文