一、KeepAliveFilter
1、构造函数:
KeepAliveFilter(KeepAliveMessageFactory messageFactory, IdleStatus interestedIdleStatus)
KeepAliveFilter(KeepAliveMessageFactory messageFactory, IdleStatus interestedIdleStatus, KeepAliveRequestTimeoutHandler policy)
第一个使用默认的KeepAliveRequestTimeoutHandler.CLOSE
第二个使用指定(或自己定义的)KeepAliveRequestTimeoutHandler
2、方法:
setForwardEvent(boolean forwardEvent)
设置是否把IoEventType.SESSION_IDLE往下传(下一个filter,handler),如果设为true,空闲时还会使用filter,handler处理空闲的相关方法。
setRequestTimeout(int keepAliveRequestTimeout)
设置接收心跳回复的期限(就是KeepAliveFilter发了一个心跳包,如果在设置的期限内没收到回复就会调
用KeepAliveRequestTimeoutHandler)。该方法会影响
IoSessionConfig.setIdleTime(IdleStatus, int)。就是如果设
置setRequestTimeout,调用setIdleTime进行的设置就不会生效
setRequestInterval(int keepAliveRequestInterval)
设置心跳包发送周期
二、KeepAliveRequestTimeoutHandler
1、重写KeepAliveRequestTimeoutHandler需要实现下面四个方法
isResponse
判断是否为心跳回复
isRequest
判断客户端发送的数据是否为心跳包
getRequest
获取心跳包
getResponse
获取回复心跳包
2、以上四个方法调用顺序:
在收到客户端数据时,调用isResponse,isRequest,若isRequest返回true,再调用getResponse
往客户端发送数据时,调用isResponse,isRequest
如果设置了心跳包发送周期(setRequestInterval),会周期调用getRequest(要注意的是,如
setForwardEvent设为true,那么调用getRequest,也会调用其他filter,handler的处理空闲的相关方法)