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

背景就是:公司以前的老lua代码,现在前端想用ccc3.8.2重写。 然后服务端不改。

我使用protobufjs6.8.x 编译出来的js文件,在部分协议解析会有异常。所以怀疑是版本兼容的问题。

现在就是关注到老版本使用的protoc编译器版本是2.6.1,然后我使用这个protoc去导出js文件。

.\protoc --js_out=import_style=commonjs,binary:. mahjong_common.proto mahjong.proto

然后导出的js文件中使用
var jspb = require(‘google-protobuf’);
我不知道该怎么选择版本~ 折腾一天了没啥头绪了,特来求助大佬们。

1赞

统一用老代码版本的pb插件呗

关键这个版本不知道怎么去对应啊 protobufjs 也有很多版本~

.proto文件最上面有image

:joy: 我这是没有的

image

那可以手动加上这个然后用protobufjs6.8.x导出在试试看

尝试了一下 加了之后打包出来还是一样的解析不了~

image

有没有大佬有偿帮帮忙~!!!

蹲几个大佬~

为什么一定要把proto导出为js呢

只要能解析 导出txt我都可以接受 :upside_down_face:

昨天我看到同事也是这样做导出js来操作,网上都是这种做法,我觉得太麻烦了
给你提供另外一种思路
import protobuf = require(“protobufjs”);
var root = new protobuf.Root();
protobuf.parse(你的proto text文件,按照text的方式读出来, root);
然后把协议文件的message后面的字段按照map<string,protobuf.Type>的方式存储起来
就像这样,比如登录type是1000
var map = {}
map[1000]= root.lookupType(“login”)
之后的操作就是 解析协议头 获取到type ,在从map中得到protobuf.Type
通过protobuf.Type去decode 或者encode就行了

protobuf.Type去decode 或者encode 这个不也要导出js才有方法吗

大佬们 什么版本的protobufjs 能解析proto2的协议啊

不用导出成js 假如你是把proto文件放在resources中
cc.resources.load(proto名字,(err,data)=>{
protobuf.parse(data.text, root);
})

目前尝试
1.论坛或者群里分享的 pb框架 (大概都是基于pbjs 6.8 或者最新版) 3套全部解析失败。
2.降低版本到 pbjs@5.0.3 解析失败。
3.protoc 编译JS google-protobuf.js 解析失败。
4.观察数据包大小对比包是完整的。

暂时没有尝试方向了…

新的一天~ 有大佬坐下来聊聊么。

服务器用的是啥版本的protobuf?

cocos/cocos-example-projects (github.com) 这里有demo,我3.8.2可以跑~~~

2.6.1吧

3.8.2的pb框架 我跑通了好多套拉,自己测试序列化反序列化都没问题。 就是解析不了服务端的数据