在Tomcat 7 CometProcessor上缺少彗星事件

时间:2010-09-02 06:56:38

标签: java tomcat comet long-polling tomcat7

我正在使用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 个答案:

答案 0 :(得分:1)

似乎没有任何东西可以调用请求结束,所以它只会坐在那里直到发生超时。 根据我的经验,当你在调用begin的线程的上下文之外调用close时会触发END。