mina 添加心跳包

1.检测心跳包的关键代码如下:setKeepAliveRequestInterval(30);定时进入IoHandlerAdapter子类的sessionIdle(IoSession session, IdleStatus status)回调方法;

/***************************************************************************************/
        /**检测每一个连接的IoSession的心跳包,定时进入Idle状态,用一下方法,以上备注不可行**/
        KeepAliveMessageFactoryImpl kamfi = new KeepAliveMessageFactoryImpl();//KeepAliveMessageFactory的实现类
        KeepAliveFilter kaf = new KeepAliveFilter(kamfi);
        kaf.setKeepAliveRequestInterval(30); //设置进入Idle状态的时间,单位为s
        acceptor.getFilterChain().addLast("heart", kaf);
        /***************************************************************************************/

2.主函数如下:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.keepalive.KeepAliveFilter;
import org.apache.mina.filter.keepalive.KeepAliveMessageFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaService {
    private static final int PORT = 22222;// 定义监听端口

    public static void main(String[] args) throws IOException {
        IoAcceptor acceptor = new NioSocketAcceptor();
        // acceptor.getSessionConfig().setReadBufferSize(1024*1024);//发送缓冲区1M
        ObjectSerializationCodecFactory factory = new ObjectSerializationCodecFactory();
        factory.setDecoderMaxObjectSize(Integer.MAX_VALUE);// 设定后服务器可以接收大数据
        factory.setEncoderMaxObjectSize(Integer.MAX_VALUE);
        // 读写 通道均在30 秒内无任何操作就进入空闲状态.
        // acceptor.setReaderIdleTime(30);
        // acceptor.setWriterIdleTime(30);
        // acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
        /***************************************************************************************/
        /**检测每一个连接的IoSession的心跳包,定时进入Idle状态,用一下方法,以上备注不可行**/
        KeepAliveMessageFactoryImpl kamfi = new KeepAliveMessageFactoryImpl();
        KeepAliveFilter kaf = new KeepAliveFilter(kamfi);
        kaf.setKeepAliveRequestInterval(30); 
        acceptor.getFilterChain().addLast("heart", kaf);
        /***************************************************************************************/
        // acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        acceptor.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));// 指定编码过滤器
        acceptor.setHandler(new TimeServerHandler());// 指定业务逻辑处理器
        acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));// 设置端口号
        acceptor.bind();// 启动监听
    }
}

class KeepAliveMessageFactoryImpl implements KeepAliveMessageFactory {

    @Override
    public boolean isRequest(IoSession session, Object message) {
        return false;
    }

    @Override
    public boolean isResponse(IoSession session, Object message) {
        return false;
    }

    @Override
    public Object getRequest(IoSession session) {
        return null;
    }

    @Override
    public Object getResponse(IoSession session, Object request) {
        return null;
    }

}

3.TimeServerHandler是IoHandlerAdapter的子类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值