关于cocos creator 使用socket-io传输protobufjs提示illegal buffer的问题

环境:

客户端:cocos creator + socket-io + protobufjs 

服务器:nodejs + socked-io + protobufjs 

protobujs使用的是生成好的静态js文件

问题:

    今天在测试的时候发现客户端发给服务器的buffer数据后,服务器解析过程出错,总提示“Error: illegal buffer at *** create_typed_array”这种类似问题,同样的服务器发给客户端,客户端解析时也会提示。

    一开始不知道怎么回事,就一顿度娘和谷歌,也没查到怎么回事,偶然发现了一片帖子中提到uint8arry的问题,便回头看了一下提示错误的地方,看了一下源码,如下:

关于cocos creator 使用socket-io传输protobufjs提示illegal buffer的问题_第1张图片

在create_array的时候先判断了Uint8Array是不是undefined的,如果不是,就开始创建。问题就是出现在用buffer创建的地方。

问题就出现在这个我们发给服务器的buffer上,encode的时候buffer中什么样的类型都有,不仅仅是Uint8Array,还会有Uint32Array。

所以想到的解决办法如下(不知道有没有坑):

客户端发服务器:

在encode之后将数据填充到Uint8Array后发给服务器:

关于cocos creator 使用socket-io传输protobufjs提示illegal buffer的问题_第2张图片

接收到服务器的data:

以上方法可以解决buffer解析出错的问题,但是还未应用到实际生产环境中,只是在为小游戏做准备,先暂时这样用着,如有问题再去解决。

还有就是微信小游戏对包体大小限制的很严格,如果用生成好的静态js文件,随着协议越多,js文件就会越大,这个有什么好办法解决呢?(难道是删掉里面的注释?手动滑稽)希望有大神有办法可以赐教!! 

你可能感兴趣的:(关于cocos creator 使用socket-io传输protobufjs提示illegal buffer的问题)