如果涉及到多端通讯,定义的protobuf消息格式可能不一样,会导致出现各种问题,比如名称或者消息的先后顺序,或者每个消息的id顺序不一致,都有可能导致解析不出来,我这里总结一下。
message消息名称可以不一致
定义的时候,message叫啥可以不一致,但解析的使用,使用相同的message格式类解析就可以。
比如服务端的message类叫:
message all_person {repeated person Per = 1;
}
客户端的message类叫:
message person_list {repeated person Per = 1;
}
但是消息体的格式是一致的,就可以解析出来消息。
消息体顺序不一致也可以
比如服务端的消息里面有两个数据类型:
message person {int32 id = 1;string name = 2;
}
客户端的消息里面也有两个类型,但是顺序不一致:
message person {string name = 2;int32 id = 1;
}
这样也是可以解析出来消息的。
消息体格式一直,id不一致,不可以
比如服务端的消息体格式:
message person {int32 id = 1;string name = 2;
}
客户端的消息体格式:
message person {int32 id = 2;string name = 1;
}
这样的话,消息就对不上了,会导致解析出错:
protobufjs_minimal.js?v=48ff343a:1034 Uncaught RangeError: index out of range: 5 + 120 > 12
at indexOutOfRange (protobufjs_minimal.js?v=48ff343a:1034:14)
at Reader.read_bytes [as bytes] (protobufjs_minimal.js?v=48ff343a:1172:15)
at Reader.read_string [as string] (protobufjs_minimal.js?v=48ff343a:1183:24)
at Function.decode (person.js:127:47)
at ws.onmessage (404.vue:19:44)