问题描述
采用java的servlet实现EventSource的服务端,客户端在每次接收请求后会断开
问题出现的环境背景及自己尝试过哪些方法
jdk版本是1.7
servlet版本是servlet-api:2.5
使用nodejs作为后端时,不会出现每次断开的情况,一次连接后,可多次接收服务端的数据;
相关代码
服务端代码:
public class TestEventSource extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/event-stream");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Connection","keep-alive");
response.setHeader("Access-Control-Allow-Origin","*");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print("data: testEventSource\n");
out.flush();
}
}
客户端代码:
const evtSource = new EventSource('/y/adm/market/message');
evtSource.onopen = function onopen() {
console.log('你创建了一个服务器长连接');
};
evtSource.onmessage = function onmessage(e) {
console.log(e.data);
};
evtSource.onerror = function onerror(e) {
console.log('你进入了onerror方法');
};
你期待的结果是什么?实际看到的错误信息又是什么?
客户端发起请求后,能够收到服务端的数据,但会立刻断开,触发onerror方法;之后每3秒循环一次
按照我的理解,EventSource应该是一次请求后,保持连接,不断接收服务端返回的数据,不应该断开连接。实际上使用nodejs作为服务端确实是这样的,能够一次请求,多次接收服务端的数据;
问题出在哪里?请大佬指点
楼主现在知道为甚么了吗?我也不是很懂能不能说一下