protobuf使用(protobuf版本号控制)
今天小然来给大家分享一些关于protobuf版本号控制方面的知识吧,希望大家会喜欢哦
protobuf使用(protobuf版本号控制)
protobuf使用(protobuf版本号控制)
1、netty中提供的protobuf编码可以让我们直接在netty中传递protobuf对象。
2、同时netty也提供了支持UDP协议的channel叫做NioDatagramChannel。
3、如果直接使用NioDatagramChannel,那么我们可以直接从channel中读写UDP对象:DatagramPacket。
4、但是DatagramPacket中封装的是ByteBuf对象,如果我们想要向UDP channel中写入对象,那么需要一个将对象转换成为ByteBuf的方法,很明显netty提供的protobuf编码就是一个这样的方法。
5、那么可不可以将NioDatagramChannel和ProtobufDecoder,ProtobufEncoder相结合呢?NioDatagramChannel中channel读写的对象都是DatagramPacket。
6、而ProtobufDecoder与ProtobufEncoder是将protoBuf对象MessageLiteOrBuilder跟ByteBuf进行转换,所以两者是不能直接结合使用的。
7、怎么才能在UDP中使用protobuf呢?今天要向大家介绍netty专门为UDP创建的编码DatagramPacketEncoder和DatagramPacketDecoder。
8、UDP的数据包在netty中是怎么表示呢?netty提供了一个类DatagramPacket来表示UDP的数据包。
9、netty中的UDP channel就是使用DatagramPacket来进行数据的传递。
10、先看下DatagramPacket的定义:DatagramPacket继承自DefaultAddressedEnvelope,并且实现了ByteBufHolder接口。
11、其中的ByteBuf是数据包中需要传输的数据,InetSocketAddress是数据包需要发送到的地址。
12、而这个DefaultAddressedEnvelope又是继承自AddressedEnvelope:DefaultAddressedEnvelopee中有三个属性,分别是message,sender和recipient:这三个属性分别代表了要发送的消息,发送方的地址和接收方的地址。
13、DatagramPacketEncoder是一个DatagramPacket的编码器,所以要编码的对象就是DatagramPacket。
14、上一节我们也提到了DatagramPacket实际上继承自AddressedEnvelope。
15、所有的DatagramPacket都是一个AddressedEnvelope对象,所以为了通用起见,DatagramPacketEncoder接受的要编码的对象是AddressedEnvelope。
本文到这结束,希望上面文章对大家有所帮助。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。