netty使用介绍
- 2016-04-30 22:08:00
- admin
- 原创 2564
一、netty使用介绍
1、示例文档:https://netty.io/wiki/index.html
2、帮助文档:https://netty.io/wiki/user-guide-for-4.x.html
3、ServerBootstrap用于初始化服务端,Bootstrap用于初始化客户端;
4、ServerBootstrap.group(bossGroup,workerGroup),设置线程池;
5、Bootstrap.group(workerGroup),设置线程池;
6、bossGroup线程池用于建立连接,workerGroup线程池用于数据收发;
7、NioServerSocketChannel实现了ServerSocketChannel,用于服务端通道;
8、NioSocketChannel实现了SocketChannel,用于客户端通道,用于已建立通道;
9、ChannelHandler需要释放传递给他的ReferenceCounted对象,ByteBuf是引用计数对象;
ByteBuf使用介绍:
1、ByteBuf.readableBytes(),可读字节数量;
2、ByteBuf.markReaderIndex(),标记读位置;
3、ByteBuf.resetReaderIndex(),恢复读位置;
4、ByteBuf.skipBytes(length),丢弃指定数量字节;
5、ByteBuf.slice(index,length),返回一个片段,底层数据共享,读写位置相互独立;
6、ByteBuf.retainedSlice(index,length),功能跟slice一致,但会增加原始缓存引用计数;
7、ByteBuf包含读位置和写位置,所以不需要flip操作,ridx和widx之间就是有效数据;
8、AdaptivePoolingAllocator.AdaptiveByteBuf实现了ByteBuf,默认使用该缓存;
codec使用介绍:
1、ByteToMessageDecoder帮助解码,他会一直缓存数据,直到数据可以成功解码一个消息;
2、ByteToMessageDecoder.decode需要判断数据长度是否足够解码,每次仅需解码一个消息;
3、ByteToMessageDecoder.decode成功解码一个消息可能被调用多次,编码时需要考虑重入情况;
4、ReplayingDecoder帮助文档:https://netty.io/4.1/api/io/netty/handler/codec/ReplayingDecoder.html
5、ReplayingDecoder继承ByteToMessageDecoder,具备父类功能,且在解码时不用判断数据长度是否足够;
6、ReplayingDecoder包含ReplayingDecoderByteBuf,该类在读取数据且长度不够时,抛出异常并恢复读位置;
7、ReplayingDecoder.checkpoint更新解码状态,避免重复解码时,执行所有步骤;
codec使用介绍:
1、LineBasedFrameDecoder用于按行解析消息,maxLength消息最大长度;
2、FixedLengthFrameDecoder用于解析定长消息,frameLength定长消息大小;
3、LengthFieldBasedFrameDecoder解析带长度字段的消息,maxFrameLength消息最大长度;
4、帮助文档:https://netty.io/4.1/api/io/netty/handler/codec/LengthFieldBasedFrameDecoder.html