今天小然来给大家分享一些关于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。

本文到这结束,希望上面文章对大家有所帮助。