Отсутствующие кометные события в Tomcat 7 CometProcessor - PullRequest
1 голос
/ 02 сентября 2010

Я использую CometProcessor для реализации длинного опроса на Tomcat 7.0.Меня беспокоит то, что я не получаю никаких других событий, кроме CometEvent.EventType.BEGIN.Пример кода:

    @Override
    public void event(CometEvent event) throws IOException, ServletException {

    HttpServletRequest request = event.getHttpServletRequest();
    HttpServletResponse response = event.getHttpServletResponse();
    if (event.getEventType() == CometEvent.EventType.BEGIN) {
        LOGGER.info("Begin for session: " + request.getSession(true).getId());
    } else if (event.getEventType() == CometEvent.EventType.ERROR) {
        LOGGER.error("Error for session: " + request.getSession(true).getId());
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.END) {
        LOGGER.info("End for session: " + request.getSession(true).getId());
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.READ) {
        LOGGER.info("Read from session: " + request.getSession(true).getId());
    }

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

Есть ли у кого-нибудь какие-либо идеи относительнонеправильно?

1 Ответ

1 голос
/ 13 октября 2010

Кажется, что нет ничего, чтобы вызвать конец запроса, поэтому он будет просто сидеть, пока не истечет время ожидания. По моему опыту, END запускается, когда вы вызываете close вне контекста потока, который вызывает begin.

...