服务端采用C++编写,客户端用LUA,使用pbc来解析数据。
采用proto3版本的时候,对于repeated基础类型,客户端会解析失败。
调试发现这个字段的类型被解析为PTYPE_REPTEATED,虽然服务端默认采用[packed=true]来打包。
测试发现如果在PROTO文件中强行指定[packed=true]则解析正常。
此外PROTO3还有一个让人无法忍受的问题:那就是所有的字段都有一个默认值,而LUA中常用的nil判断就完全失效了!
最终全面转回PROTO2,一切问题都解决了,唯一的问题就是要多写几个optional或者required.