Push сервера Java Servlet 3.0: отправка данных несколько раз с использованием одного и того же AsyncContext

Приведите несколько примеров и ответы на вопросы здесь (в основномhttp://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=3 ), Я хочу, чтобы сервер отправлял ответ несколько раз клиенту без завершения запроса. Когда время ожидания истекло, я создаю еще один и так далее.

Я хочу избежать длительного опроса, так как мне приходится пересоздавать запрос каждый раз, когда я получаю ответ. (и это совсем нек чему стремятся асинхронные возможности сервлета 3.0).

У меня есть это на стороне сервера:

@WebServlet(urlPatterns = {"/home"}, name = "async", asyncSupported = true) 

public class CometServlet extends HttpServlet {

    public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {

        AsyncContext ac = request.startAsync(request, response);

        HashMap store = AppContext.getInstance().getStore();

        store.put(request.getParameter("id"), ac);

    }
}

И поток для записи в асинхронный контекст.

class MyThread extends Thread {
    String id, message;

    public MyThread(String id, String message) {
        this.id = id;
        this.message = message;
    }

    public void run() {
        HashMap store = AppContext.getInstance().getStore();
        AsyncContext ac = store.get(id);
        try {
            ac.getResponse().getWriter().print(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Но когда я делаю запрос, данные отправляются только если я позвонюac.complete(), Без этого запрос всегда будет тайм-аут. Так что в основном я хочу иметь данныепотоковым» до завершения запроса.

Просто чтобы сделать заметку, я попробовал это сJetty 8 продолжениеAPIЯ тоже пробовал с печатьюOutputStream вместоPrintWriter, Я тоже пробовалflushBuffer() на ответ. То же самое.

Что я делаю неправильно?

Клиентская сторона делается так:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:8080/home', true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 3 || xhr.readyState == 4) {
            document.getElementById("dynamicContent").innerHTML = xhr.responseText;
        }
    }
    xhr.send(null);

Может кто-нибудь хотя бы подтвердить, что на стороне сервера все в порядке? :)

Ответы на вопрос(2)

Ваш ответ на вопрос