前言
今天涉及以下内容:
心跳机制种类
心跳机制在客户端和服务端涉及的类
心跳机制在客户端和服务端的实现
效果图个项目结构图
涉及机制的几个类源码
先来波效果图
客户端心跳日志.png
服务端心跳日志.png
一.心跳机制种类
mina提供一个过滤器类org.apache.mina.filter.keepalive.KeepAliveMessageFactory,此类具备在IO空闲的时候发送并且反馈心跳包。
KeepAliveMessageFactory接口主要有以下几个方法:
boolean isRequest(IoSession ioSession, Object o)
boolean isResponse(IoSession ioSession, Object o)
Object getRequest(IoSession ioSession)
Object getResponse(IoSession ioSession, Object o)
心跳机制主要分为下面几类:
1.1 active 活跃型
读取通道空闲时发送心跳请求,一旦心跳请求被发出,若在keepAliveRequestTimeout内未收到心跳反馈,KeepAliveRequestTimeoutHandler将会被调用.心跳包被接收后,心跳反馈会立刻发出。
在此心跳机制下,KeepAliveMessageFactory类中的getRequest(IoSession ioSession)与getResponse(IoSession ioSession, Object o)必须返回非空
1.2 semi-active 半活跃型
读取通道空闲时发送心跳请求。发送心跳请求单不关注心跳反馈,当一个心跳请求包被接收后,心跳反馈立马发出。
在此机制下,KeepAliveMessageFactory类中的getRequest(IoSession ioSession)与getResponse(IoSession ioSession, Object o)必须返回非空。并且心跳包请求后超时无反馈的处理机制设置为KeepAliveRequestTimeoutHandler.NOOP(不做任何处理), KeepAliveRequestTimeoutHandler.LOG(只输出警告信息不做其他处理)
1.3 passive 被动型
当前IO不希望主动发送心跳请求,但是当接受到一个心跳请求后,那么该心跳反馈也会立即发出。
在此机制下, KeepAliveMessageFactory类中的getRequest(IoSession ioSession)必须反馈null,getResponse(IoSession ioSession, Object o)必须返回非空。
1.4 deaf speaker 聋子型
当前IO会主动发送心跳请求,但是不想发送任何心跳反馈。
在此机制下,KeepAliveMessageFacto