2020-04-09vue中使用protobuf

JavaScript011

2020-04-09vue中使用protobuf,第1张

1. 安装protobuf转换 npm i protobufjs

2. 在src目录结构下建一个文件夹proto(叫什么名字都行)

3. 将.proto文件拷贝到proto文件夹下  

4. 在package.json文件中添加proto生成命令

   pbjs -t static-module -w commonjs -o src/proto/proto.js src/proto/*.proto 

5. 然后在CMD中进入本项目文件夹执行npm run proto即可在proto文件夹下生成proto.js文件

6. 如果proto.js在使用时出现报错问题是因为导出语法问题,改成<kbd>export default</kbd>即可

7. 如有疑问可以留言

环境:客户端:cocos creator + socket-io + protobufjs  服务器:nodejs + socked-io + protobufjs  protobujs使用的是生成好的静态js文件问题:    今天在测试的时候发现客户端发给服务器的buffer数据后,服务器解析过程出错,总提示“Error: illegal buffer at *** create_typed_array”这种类似问题,同样的服务器发给客户端,客户端解析时也会提示。     一开始不知道怎么回事,就一顿度娘和谷歌,也没查到怎么回事,偶然发现了一片帖子中提到uint8arry的问题,便回头看了一下提示错误的地方,看了一下源码,如下:在create_array的时候先判断了Uint8Array是不是undefined的,如果不是,就开始创建。问题就是出现在用buffer创建的地方。 问题就出现在这个我们发给服务器的buffer上,encode的时候buffer中什么样的类型都有,不仅仅是Uint8Array,还会有Uint32Array。 所以想到的解决办法如下(不知道有没有坑): 客户端发服务器:在encode之后将数据填充到Uint8Array后发给服务器:接收到服务器的data:以上方法可以解决buffer解析出错的问题,但是还未应用到实际生产环境中,只是在为小游戏做准备,先暂时这样用着,如有问题再去解决。还有就是微信小游戏对包体大小限制的很严格,如果用生成好的静态js文件,随着协议越多,js文件就会越大,这个有什么好办法解决呢?(难道是删掉里面的注释?手动滑稽)希望有大神有办法可以赐教!! 

var ByteBuffer = require("bytebuffer")

var ProtoBuf = require("protobuf")

4.将protobuf原文件(.proto)复制到项目assets/resources目录下,如果没有resources目录,新建一个即可

5.使用protobuf.js解析proto文件,因为我的原文件放在assets/resources/protobuf/guaji.proto,此处不需要加后缀,cocos2d会自动查找 ,ProtoBuf.protoFromString方法会解析文件生成一个protobuf对象工厂。