简体   繁体   English

Comet和NIO-客户端断开连接

[英]Comet and NIO - Client disconnect

I've this class: 我上了这个课:

public class CometServlet extends HttpServlet implements CometProcessor{
private static final Integer TIMEOUT = 20 * 1000;

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

    HttpServletRequest request = event.getHttpServletRequest();
    HttpServletResponse response = event.getHttpServletResponse();
    if (event.getEventType() == CometEvent.EventType.BEGIN) {
        request.setAttribute("org.apache.tomcat.comet.timeout", TIMEOUT);
        System.out.println("Begin for session: " + request.getSession(true).getId());
    } else if (event.getEventType() == CometEvent.EventType.ERROR) {
        System.out.println("Error for sessions: " + request.getSession(true).getId());
        if(event.getEventSubType() == EventSubType.TIMEOUT) {
            System.out.println("timeout for session: " + request.getSession(true).getId());
        }
        else if(event.getEventSubType() == EventSubType.IOEXCEPTION) {
            System.out.println("ioexception for session: " + request.getSession(true).getId());
        }
        else if(event.getEventSubType() == EventSubType.CLIENT_DISCONNECT) {
            System.out.println("client disconnect for session: " + request.getSession(true).getId());
        }
        response.getWriter().close();
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.END) {
        System.out.println("End for session: " + request.getSession(true).getId());
        if(event.getEventSubType() == EventSubType.WEBAPP_RELOAD) {
            System.out.println("webappreload for session: " + request.getSession(true).getId());
        }
        else if(event.getEventSubType() == EventSubType.SESSION_END) {
            System.out.println("sessionend for session: " + request.getSession(true).getId());
        }
        response.getWriter().close();
        event.close();
    } else if (event.getEventType() == CometEvent.EventType.READ) {
        InputStream is = request.getInputStream();
        byte[] buf = new byte[512];
        do {
            int n = is.read(buf); //can throw an IOException
            if (n > 0) {
                log("Read " + n + " bytes: " + new String(buf, 0, n) 
                + " for session: " + request.getSession(true).getId());
            } else if (n < 0) {
                System.out.println("error(event, request, response)");
                return;
            }
        } while (is.available() > 0);
    }
}
}

But I can't catch event.getEventSubType() == EventSubType.CLIENT_DISCONNECT . 但是我无法捕获event.getEventSubType() == EventSubType.CLIENT_DISCONNECT Can you help me please? 你能帮我吗?

似乎CLIENT_DISCONNECT仅用于ERROR的子类型,并且发生在从客户端关闭套接字时。

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

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