美文网首页
Netty快速入门

Netty快速入门

作者: 美美的苹果核 | 来源:发表于2017-04-27 13:42 被阅读0次

    示例:

    EventLoopGroup bossGroup = new NioEventLoopGroup()
    EventLoopGroup workerGroup = new NioEventLoopGroup()
    ServerBootstrap bootstrap = new ServerBootstrap()
    //配置启动参数
    bootstrap.group(bossGroup, workerGroup)
    .channel(NioServerSocketChannel.class)
    .childHandler(new ChannelInitializer<SocketChannel>() {
        @Override
        public void initChannel(SocketChannel ch) throws Exception {
            ch.pipeline().addLast(new DiscardServerHandler())
        }
    })
    //调用sync同步方法阻塞直到绑定成功
    ChannelFuture f = b.bind().sync()
    f.channel().closeFuture().sync()
    

    主要概念:

    Bootstrap、EventLoopGroup、Channel、ChannelPipeline、Encoder、Decoder、ChannelHandler、ChannelHandlerContext、ChannelFuture等。

    流程梳理:

    • Bootstrap与ServerBootStrap分别是客户端和服务端的启动类,可以配置线程组、channel类和handler类等,ServerBootStrap比Bootstrap多一个childHandler()方法,handler()在初始化时就会执行,而childHandler()会在客户端成功connect后才执行。

    • bootstrap第一个handler类一般都是ChannelInitializer类的子类,其中initChannel(SocketChannel ch)方法可以添加不同的handler,通过ch可以获取Pipeline,Pipeline可以理解为handler容器,一个Channel包含一个Pipeline,如:ch.pipeline().addLast(new DiscardServerHandler())。

    • 自定义的handler主要继承ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter,ChannelHandlerContext可以在多个ChannelHandler中传递数据。

    • 编码器encoder和decoder也是两个adapter的子类,io.netty.handler.codec包下是内置的各种解编码器;编码器一般用List存储半包数据,业务处理一般在解编码操作后进行。

    • 粘包拆包有四种解决方式,LineBasedFrameDecoder换行符解码器、FixedLengthFrameDecoder固定长度解码器、DelimiterBasedFrameDecoder自定义的分隔符解码器、LengthFieldBasedFrameDecoder 指定长度解码器(典型如:TLV 类型-长度-值)

    • ChannelFuture和ChannelFutureListener

    channelFuture.addListener(new ChannelFutureListener() {
        @Override
        public void operationComplete(final ChannelFuture channelFuture) throws Exception {
            //do something
        }
    });
    

    相关文章

      网友评论

          本文标题:Netty快速入门

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