美文网首页
Netty 示例4 心跳机制

Netty 示例4 心跳机制

作者: 歌哥居士 | 来源:发表于2019-03-28 08:45 被阅读0次
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;

public class MyServer {
    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();

        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
                    .handler(new LoggingHandler(LogLevel.INFO))
                    .childHandler(new MyServerInitializer());

            ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
            channelFuture.channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.timeout.IdleStateHandler;

import java.util.concurrent.TimeUnit;

public class MyServerInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();

        pipeline.addLast(new IdleStateHandler(5, 7, 10, TimeUnit.SECONDS));
        pipeline.addLast(new MyServerHandler());
    }

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

public class MyServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if (evt instanceof IdleStateEvent) {
            IdleStateEvent event = (IdleStateEvent) evt;

            String eventType = null;
            switch (event.state()) {
                case READER_IDLE:
                    eventType = "读空闲";
                    break;
                case WRITER_IDLE:
                    eventType = "写空闲";
                    break;
                case ALL_IDLE:
                    eventType = "读写空闲";
                    break;
            }
            System.out.println(ctx.channel().remoteAddress() + "超时事件: " + eventType);
            ctx.channel().close();
        }
    }
}

客户端就使用前一个示例的就可以了。
读空闲:客户端什么都不干就会出现读空间,因为服务器读不到数据。
写空闲:客户端一直写,但是服务器没有处理写数据的代码,所以就会出现写空闲。
读写空闲:上面两个随便达到一个条件,可以将读写空闲的时间设置小一点。

相关文章

  • Netty 示例4 心跳机制

    客户端就使用前一个示例的就可以了。读空闲:客户端什么都不干就会出现读空间,因为服务器读不到数据。写空闲:客户端一直...

  • Netty实战 - Netty的心跳和重连机制

    Netty的心跳和重连机制 参考资料 IdleStateHandler

  • Netty心跳之IdleStateHandler

    概述:Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否在线 心跳机制的优势: 心跳可以检测远程端是否在...

  • sofa-bolt 心跳检测

    一、概述 soft-bolt心跳机制是基于Netty,因此在分析soft-bolt的心跳之前,先分析一下netty...

  • Netty 超时机制及心跳程序实现

    本文介绍了 Netty 超时机制的原理,以及如何在连接闲置时发送一个心跳来维持连接。 Netty 超时机制的介绍 ...

  • Netty 超时机制及心跳程序实现

    本文介绍了 Netty 超时机制的原理,以及如何在连接闲置时发送一个心跳来维持连接。 Netty 超时机制的介绍 ...

  • Netty实现心跳机制与断线重连

    提醒:本篇适合有一定netty基础的读者阅读 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服...

  • Netty心跳基本检测机制

    Netty心跳基本检测机制 首先,了解下为什么需要心跳?假设客户端(如手机,PAD)与服务器端已经建立了长连接,客...

  • Netty实现心跳机制

    心跳检测逻辑:服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在线服务端必定会收到数据,...

  • Netty4(十二):实现心跳机制

    案例代码下载 Netty 超时机制介绍 Netty 为超时机制提供了几个关键类:IdleState 是一个枚举,它...

网友评论

      本文标题:Netty 示例4 心跳机制

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