美文网首页
Netty 心跳IdleStateHandler

Netty 心跳IdleStateHandler

作者: holmes000 | 来源:发表于2020-05-05 15:44 被阅读0次

IdleStateHandler


image.png
package com.whn.text.heatbeat;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.timeout.IdleStateHandler;

import java.util.concurrent.TimeUnit;

public class HeatBeatServer {
    public static void main(String[] args) throws Exception {
        NioEventLoopGroup bossGroup = new NioEventLoopGroup(1);
        NioEventLoopGroup workGroup = new NioEventLoopGroup();

        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workGroup).
                    channel(NioServerSocketChannel.class).
                    handler(new LoggingHandler(LogLevel.INFO)).
                    childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast(new IdleStateHandler(3, 5, 7, TimeUnit.SECONDS));
                            ch.pipeline().addLast(new HeatBeatHandler());
                        }
                    });
            System.out.println("服务端准备完毕。。。");
            ChannelFuture channelFuture = serverBootstrap.bind(7000).sync();
            channelFuture.channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workGroup.shutdownGracefully();
        }
    }
}
package com.whn.text.heatbeat;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;

public class HeatBeatHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if (evt instanceof IdleStateEvent) {
            String msg = null;//业务处理
            switch (((IdleStateEvent) evt).state()) {
                case READER_IDLE:
                    msg = "READER_IDLE";
                    break;
                case WRITER_IDLE:
                    msg = "WRITER_IDLE";
                    break;
                case ALL_IDLE:
                    msg = "ALL_IDLE";
                    break;
                default:
                    msg = "Nothing";
            }
            System.out.println("++++" + ctx.channel().remoteAddress() + "超时类型:" + msg);
        }
    }
}

相关文章

网友评论

      本文标题:Netty 心跳IdleStateHandler

      本文链接:https://www.haomeiwen.com/subject/agbmghtx.html