【求助】3.8.2使用旧版本protobuf问题

服务端和客户端pb版本是一致的吗?至少是兼容的

服务端的pb版本太老了呀 我用了pbjs 6.x 和 5.0 都不行~

然后我直接用服务端发了protoc 编译js 也解析不了。 所以就很迷了 不知道问题出在哪了

服务端和客户端都升级都同一个版本得了,折腾这么多天还不如用新版本抄一份协议文件

我也建议是服务器和客户端一起升级

我也想建议~ 但是老项目还在跑着 还挣着钱呢。 他们就不想换

看看你解析错误的地方在哪儿哪个字段什么类型,找到原因再看

可以把相同的数据在客户端和服务器encode,再对比看哪里不同,就知道哪里解析有问题了,再根据这个问题看是版本还是数据有问题

大佬 我发个pb和服务端的数据给您 能帮忙解析看看问题嘛~ :upside_down_face:

发一下出问题的协议对应的message定义看下,从报错上看
1.协议两端不同步
2.定义的类型有问题

image
image
只知道是解析这个 PlayerInfo 出的问题

协议我和后端也确定过 他们保证是同步的。
定义类型的话 说是线上在使用的

image
这解析字节对不上,是不是忘了偏移cmd用的字节数,直接把服务器发来的数据传入进行decode
前32字节是索引,然后从33开始是int64 tai

前面cmd已经剪掉了。 这个协议在没有PlayerInfo的时候是正常解析的。

意思是不是我这边解析的时候以254结束了 而正常的应该是224+32=256才对

image
是的应该指向256才对,如果前面4个字段解析完是正确的,有点说不通,protobufjs 5.x或6.x还是基于proto2的语法,感觉还是offset偏移有点问题,从254开始就执行skipType说明第5个字段players应该是空数组,按上面说的没有players时是正常解析,现在players有值结果执行了skipType了,只能把收到的buff贴出来看看了

下面是proto2,3的区别
image
https://blog.csdn.net/ymzhu385/article/details/122307593

test.zip (1.2 MB)

大佬 能麻烦帮忙测试一下嘛 不胜感激!

你这个信息都提供不全

  1. 解析错误的消息体 proto message
  2. 解析错误的消息体数据(和下面 buffer 对应)
  3. 解析错误的消息体 buffer(和上面数据对应)

解析错误的消息体 UserLoginRoom

解析错误的消息体数据 看里面提供的buffer (已经去cmd了)

还缺啥嘛

消息体数据呢?都没有数据怎么对比?你还没明白我说的意思。

用相同的数据在服务器和客户端 encode,再用两个数据的 bytes 数据做对比。就能知道问题在哪儿

我以前解决这个问题,是这样子的:让服务器把发过来的协议(16进制格式),跟自己收到的做对比.
如果一样,慢慢断点看看哪个数据异常.

1赞

这就是我说的意思