为什么Mina服务端 心跳过滤器 的 isRequest 执行了2次
2016-06-21 22:36
531 查看
经过夜战,察看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调用了两次。
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调用了两次。
相关文章推荐
- 单调队列1003 HDU 3530 Subsequence
- UI控件之ProgressBar(进度条)
- Android Studio启动虚拟机的时候出现问题Instant Run Requires‘Tools | Android | Enable ADB integration’...
- Range Sum Query - Mutable
- leetcode 357. Count Numbers with Unique Digits
- UVa 1151 Buy or Build (最小生成树+二进制法暴力求解)
- 文件缓存图片
- UIWindows小知识点
- easyui datebox 扩展清空按钮
- UiAutomatorHelper
- Android使用UiAutomator进行测试
- ProgressBar线程更新问题
- 转载:AbstractQueuedSynchronizer的介绍和原理分析
- ios上 更改 状态栏(UIStatusBar)的颜色
- UGUI 代码流程
- [转载]使用SoapUI进行负载测试
- Android从源码分析handler.post(runnable),view.post(runnable),runOnUiThread(runnable)执行时机
- [转载]SOAPUI压力测试的参数配置
- Unable to satisfy the following requirements解决方案
- IT十八掌作业_java基础第十六天_GUI/socket