2010-09-02 102 views
1

我正在使用CometProcessor在Tomcat 7.0上實現長輪詢。困擾我的是我除了CometEvent.EventType.BEGIN之外沒有其他任何事件。 的代碼示例:Tomcat 7上缺少comet事件CometProcessor

@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()); 
    } 

我相信它會導致因爲開始事件我保存在我的本地陣列響應對象的內存泄漏。

有沒有人有什麼想法可能是錯的?

回答

1

似乎沒有什麼可以調用請求結束,所以它只會坐在那裏,直到發生超時。 根據我的經驗,在調用開始的線程的上下文之外調用close時觸發END。