在2.x使用没啥问题,在3.x就一堆错,完全跑不起来。
一个问题是引用的时候要加后缀,
另一个是解析proto导出的js提示找不到protobuf,
还有个是在引用了导出的js后提示一堆 无法从 pack:///mods/fs/0/assets/load/script/NetLoad.js 解析出模块 __unresolved_1。
还有一堆解析不出来,当作外部模块
我没法直接帮你,但说个额外的问题 网络传输 ,为什么不直接用 ArrayBuffer方式呢 ,这东西JS直接原生支持的 发送接收解析 简单的很都,格式完全自己定义,想怎么传就怎么传,我认为比protobuf方便多了 为啥一定要用protobuf呢
我也没办法帮楼主, 但你的问题我可以回答一下我的观点
你的问法等价于, 为什么tcp不能用, 要用websocket呢
arraybuffer只是说js支持直接二进制传输数据, 而protobuf是协议的定位, 怎么组织二进制到对象的过程
你自己直接用二进制发,一样要实现这过程, 一个对象或者一组业务数据,怎么序列化为二进制, 收到的数据怎么做拆包粘包(websocket貌似内置实现), 然后二进制数据怎么反序列化为需要的业务数据
tcp不能直接用 因为没有直接的应用层接口提供给你 你想用也用不了,
但websocket可以直接用 因为有接口, 你的问题改成websocket 和socketio的关系还差不多 但websocket 和socketio关系 正好和ArrayBuffer和protobuf关系 差不多 ,一个是原生接口方式 一个是包装方式,websocket 直接用一点问题都没有 很简单很方便,和直接用ArrayBuffer没区别
至于怎样组织数据 是逻辑层的事情,ArrayBuffer是传输方式的事情 两个完全不是一个层级的东西,你把你要传输的数据用二进制也好 用JSON也好 用字符串也好,那是逻辑层的事情 你组织好然后通过ArrayBuffer传就是了 ArrayBuffer就是负责传输的 然后怎么解析也是你逻辑层的事情,这个层次划分很合理 至少我没看到哪里有不方便的 你可以说你不想用这种方式 这没什么 你可以继续用protobuf 但ArrayBuffer的方式没有任何不放的地方,就像直接用websocket 而不是用socketio一样
另外说一句websocket没处理粘包问题也 需要你自己处理
你的回复让我觉得你对通讯协议有点定位不准
我的理解, 通讯协议是 传输的二进制数据包 和 可理解的数据对象 之间的定义以及互转实现
而protobuf就是这么一个东西, 将定义好的数据对象(即model), 转为二进制数据,或者反过来,将传输过来的二进制数据转为定义好的数据对象
另外提一句, ArrayBuffer只是一个包裹二进制段的类,是数据结构, 本身和协议不是同类定义没法直接比较, 我的回复(反驳)是基于假设你观点是:“为什么不直接用二进制自己组织数据, 而要用protobuf来实现”
我现在应用层 就是直接用二进制组织数据 也用非二进制组织数据 但都通过ArrayBuffer传过去,没觉得有任何不方便的地方,你的逻辑层怎么定义数据 你知道吧 组织成JSON格式 可以吧 ,完全不用protobuf吧 通过ArrayBuffer传过去 没问题吧,解析就不用说了 没法再简单了吧 ,
你对ArrayBuffer的理解有问题 ArrayBuffer只是个数据传输方式 你可以设计自己的逻辑层数据 整体传过去的,你传什么你自己设计 ,没用到任何protobuf的东西 达到的结果更简单到
1.library、temp文件夹删除,不然部分文件删了,还会爆这部分的错。
2.记得引用的时候加后缀
3.生成proto的时候最好有命名空间
我比较赞同你的观点,我的理解是arraybuffer是个数据缓冲区,无论是json还是protobuf序列化的数据都可以写进来传输给服务器。所以不应该拿arraybuffer和protobuf做比较,嫌protobuf转换麻烦 可以直接使用json定义协议的。至于两者哪个更好用,网上都有资料的。
项目根目录npm 安装protobuf,然后编译成js和ts后要import root

// @ts-ignore这个也得加上,不能不加,不加root会报错
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。