经过夜战,察看mina框架的源码,可以得知keepalivefilter,贴出源码,太多字数超过限制,简要说一下
if (messageFactory.isRequest(session, message)) {
Object pongMessage =
messageFactory.getResponse(session, message);
if (messageFactory.isResponse(session, message)) {
resetStatus(session);
}
} finally {
if (!isKeepAliveMessage(session, message)) {
nextFilter.messageReceived(session, message);
}
}
private boolean isKeepAliveMessage{
return messageFactory.isRequest(session, message) ||
messageFactory.isResponse(session, message);
}
可以看出,首先调用了isrequest,如果你返回true,就会进入if里面,执行getresponse,然后调用isresponse,最后finally调用iskeepalive,这个函数里面又调用了isrequest,可以通过断点调试。查看堆栈队列得知。
所以你isrequest调用了两次。