环境:
客户端: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文件就会越大,这个有什么好办法解决呢?(难道是删掉里面的注释?手动滑稽)希望有大神有办法可以赐教!!
网友评论