problem description
the servlet of java is used to implement the server side of EventSource, and the client will disconnect after receiving each request
the environmental background of the problems and what methods you have tried
jdk version is 1.7
servlet version is servlet-api:2.5
when nodejs is used as the backend, it will not be disconnected every time. After a connection, it can receive data from the server many times.
related codes
server code:
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();
}
}
client code:
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");
};
what result do you expect? What is the error message actually seen?
after the client initiates the request, it can receive the data from the server, but immediately disconnects, triggering the onerror method, and then loops
as far as I understand it, EventSource should be a request, keep the connection, continue to receive the data returned by the server, should not be disconnected. In fact, it is true to use nodejs as the server, which can receive data from the server multiple times with one request;
what is the problem? Ask the boss for advice