收藏
回答

PC小程序WebSocket发送的是否为二进制数据的判断标准与其他平台不一致

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug WebSocket 工具 7.0.9.501 2.16.1

微信小程序的WebSocket判断发送数据是否为二进制应该是通过data字段是不是一个ArrayBuffer来判定的,比如下一段应该被判定为发送二进制数据:

var socket = wx.connectSocket({ url: 'ws://xxx/' });
socket.onOpen(() => {
    socket.send({ data: Uint8Array.from([8,31,18,5,2,3]).buffer })
})

然而在PC客户端真机调试时,通过抓包可以发现发送的websocket数据包的opcode表明它是一个text数据包。

var socket = wx.connectSocket({ url: 'ws://xxx/' });
socket.onOpen(() => {
    socket.send({ data: Uint8Array.from([8,31,18,5,2,3,128]).buffer })
})

只有把这段buffer中加上一个大于等于128的字节,才能被微信小程序正确识别为二进制数据正常发送。

回答关注问题邀请回答
收藏

1 个回答

  • 西风
    西风
    2021-08-17

    我也遇到了这个问题,希望官方尽快修复,统一类型判断标准

    2021-08-17
    有用
    回复
登录 后发表内容