Netty学习入门总结

290 阅读1分钟

ChannelHandle 类

  1. ChannelInboundHandle: 处理进来的连接以及消息,一般用在服务端

SimpleChannelInboundHandleChannelInboundHandle 的子类,在方法 channelRead0()中实现了自动释放内存,一般自己创建ChannelHandle直接实现这个类即可

  1. ChannelOutboundHanle:处理出去的消息,一般用在客户端

BootStrap

  1. ServerBootStrap:服务端启动
ServerBootStrap botStrap = new ServerBootStrap();
NioEventLoopGroup bossGroup = new NioEventLoopGroup();
NioEventLoopGroup workGroup = new NioEventLoopGroup();
bootStrap.group(boosGroup, workGroup)

一般使用两个EventLoopGroup,一个用来处理进入的连接,一个用来处理已经连接的channel
bossGroup处理新来的连接,连接成功后,交给workGroup处理
为了防止在处理channel的 io 进程的时候有连接进来,从而阻塞,所以使用两个 group 处理

使用两个 Gorup 具体实现细节可以看这篇文章 Netty线程模型--掘金

1.1. bootStrap.childHanle()
用来新加入的 channel 进行处理

比如:
>>编码器、解码器(对 ByteBuf 进行编码解码 成能看懂的东西)
协议(new WebSocketServerProtocolHandler("/ws", "WebSocket", true, 65536 * 10))
自定义的 ChannelHandle(实现ChannelHandle)

1.2. bootStrap.option()方法

通过该方法实现一些额外的定义
具体的定义都在 ChannelOption中,该类实现了 Constant,只用来定义值,不进行任何处理

1.3. channel.attr()方法

该方法可以给 channel 设置一些属性

Channel channel = ctx.channel();
AttributeKey<String> key = AttributeKey.valueOf("id");
ctx.channel().attr(key).setIfAbsent("0001");