微信小游戏 WebSocket send参数类型错误

var unit8Array = proto.addressbook.Person.encode(person).finish()
ws.send(unit8Array);

websocket + protobufjs 6

这两行代码在网页上能正常send,在微信小游戏上send时就报参数类型错误??

2赞

你send简单数据试试,不要用proto,proto我记的有动态方法,这在小程序环境不能使用,

朋友,别误导人啊,微信环境中是可以用的

this.ws.send(uint8Array.buffer.slice(uint8Array.byteOffset, uint8Array.byteLength + uint8Array.byteOffset));

2赞

ws.send(unit8Array.buffer);

1赞

我意思是让他试试静态版本的proto

朋友,你的方法可行,是不是微信小游戏上只能发送ArrayBuffer或者字符串?uint8array不能发送。

谢谢。是静态的,没用动态的。this.ws.send(uint8Array.buffer.slice(uint8Array.byteOffset, uint8Array.byteLength + uint8Array.byteOffset));可行。

同样的问题uint8Array.buffer,感谢大佬。

这个真可以,最近弄这个好几天了(微信开发者 的 “真机调试”,总是说不行,实际上传代码后,在真机上是可以的)

为什么入坑如此之久,就是看了微信文档,看见文档里面 用的是 .send({data:data})的格式,结果自作聪明,加了个if (cc.sys.platform == cc.sys.WECHAT_GAME) 判断,生成不同的websock对象

实际按目前调通的是不需要的:
let ws = new WebSocket(“wss://abc.com/websocket”);
ws.onopen = this.onopen.bind(this);
ws.onerror = this.onerror.bind(this);
ws.onmessage = this.onmessage.bind(this);
ws.onclose = this.onclose.bind(this);
ws.binaryType = “arraybuffer”;

        // 在发送时
        ws.send(addmsgid_uint8array.buffer.slice(addmsgid_uint8array.byteOffset, addmsgid_uint8array.byteLength + addmsgid_uint8array.byteOffset))
1赞

能解决问题就好,都是坑过的,如果你用protobuf的话还有个bug,会让bool值数据不对,以前找到protobuf源代码解决的。现在不知道修复了没 - -

这个怎么解决的?

非常感谢,寻找原因三四天了,终于在这里找到真相!真不明白,为啥这种必定出现的问题,官方竟然在文档只字不提,太坑了!