简体   繁体   English

Tomcat 7 CometProcessor上缺少彗星事件

[英]Missing comet events on Tomcat 7 CometProcessor

I am using CometProcessor to implement long-polling on Tomcat 7.0. 我正在使用CometProcessor在Tomcat 7.0上实现长轮询。 The thing that bothering me is I don't get any other events except CometEvent.EventType.BEGIN. 困扰我的是,除了CometEvent.EventType.BEGIN之外,我没有任何其他事件。 The code sample: 代码示例:

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

I assume it could cause memory leaks because on the BEGIN event I store the response object in my local array. 我认为这可能会导致内存泄漏,因为在BEGIN事件中,我将响应对象存储在本地数组中。

Does any one have any ideas what could be wrong? 有人有什么主意吗?

Seems there is nothing to invoke the request end so it will just sit there until a timeout occurs. 似乎没有什么可以调用请求结束的,因此它将一直坐在那里直到发生超时。 In my experience, END is triggered when you call close, outside the context of the thread that calls begin. 以我的经验,当您在调用开始的线程上下文之外调用close时,会触发END。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM