|
楼主 |
发表于 2017-5-26 15:41
|
来自: 北京市 世纪互联宽带数据中心有限公司IDC机房
第一:ProtoBuf 向前向后兼容的测试正常。
我用ProtoBuf 先写Proto 文件,再编译成JAVA 类。 可以很方便的实现 向前兼容和 向后兼容。
Proto 文件中新增的 属性 optional int32 age = 5,编译成java 类后。 无论是新版发送给旧版(该属性不用就行),或者是旧版发送得新版(该属性值为0), ProtoBuf 都可以处理好。
第二:ProtoStuff ,如果不考虑向前向后兼容(一方不增加属性),也测试正常。
可惜就是 ProtoStuff ,方便是方便,不用先写Proto 文件了,版本如果一样(不增加属性)的话测试过没有问题; 但是 ProtoStuff 一旦增加属性 反序列化时 就出错。 增加的属性 是放在最后的。(考虑到顺序的)我错了,我承认,刚发现 真的是顺序的问题!!!
我刚才看漏了,还以为是放在最后的,后来才注意到最后还有一个List 属性,昏死!
第三:粘包解包的问题以上都考虑了的,这一点我还是清楚的。 利用Netty
ch.pipeline()
.addLast(new LengthFieldBasedFrameDecoder(MAX_FRAME_LENGTH,
0,4,0,4, false))
.addLast(new MsgDecoder()) //反序列化
.addLast(new LengthFieldPrepender(4))
.addLast(new MsgEncoder()) //序列化
.addLast(new ProtoStuffServerHandler());
再次谢谢师兄指点!!!我继续检查研究。。。
|
|