SSE i Servlet 3.0

Zarejestrowałem typowy SSE podczas ładowania strony:

Klient:

sseTest: function(){

var source = new EventSource('mySSE');
source.onopen = function(event){
console.log("eventsource opened!");
};

source.onmessage = function(event){
var data = event.data;
console.log(data);
document.getElementById('sse').innerHTML+=event.data + "<br />";
};
}

Mój debugger Javascript mówi, że „eventource otwarty!” z powodzeniem.

Mój kod serwera to Servlet 3.0:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns={"/mySSE"}, name = "hello-sse", asyncSupported=true)
public class MyServletSSE extends HttpServlet {

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setContentType("text/event-stream");
resp.setCharacterEncoding("UTF-8");

Random random = new Random();
PrintWriter out = resp.getWriter();

//AsyncContext aCtx = req.startAsync(req, resp);
//ServletRequest sReq = aCtx.getRequest();

String next = "data: " + String.valueOf(random.nextInt(100) + 1) + "\n\n";
//out.print("retry: 600000\n"); //set the timeout to 10 mins in milliseconds
out.write(next);
out.flush();
// do not close the stream as EventSource is listening
//out.close();
//super.doGet(req, resp);
}
}

Kod działa! Kod klienta uruchamia metodę doGet () - co 3 sekundy i pobiera nowe dane.

Pytania: Zastanawiam się jednakjak mogę ulepszyć ten kod używając nowych Future Servlet 3.0, takich jak Async-Support lub asyncContext.addListener (asyncListener) lub coś innego, czego nie znam. Ponieważ nigdy nie zamykam strumienia, zastanawiam sięjak mój serwer się skaluje?

Teoretycznie najlepszym podejściem byłoby wyzwolenie metody doGet () - poprzez kod po stronie serwera jawnie, gdy nowe dane tam są, więc klient nie musi uruchamiać „onmessage () po stronie klienta” - Metoda, a zatem strona serwera "doGet ()" - Metoda co 3 sekundy dla nowych danych.

questionAnswers(2)

yourAnswerToTheQuestion