文档路径:wx.sendSocketMessage(Object object) | 微信开放文档
直接使用原生websocket接口也行,最终在微信环境下,还是调用的微信的接口,只不过多一些转换调用流程。
注意的问题是,微信只提供了发送和接收数据的接口,并没有提供设置数据格式的接口,所以他是按照你传入的数据,进行判断的。
比如发送接口例子:
let socketOpen = false
let socketMsgQueue = []
wx.connectSocket({
url: 'test.php'
})
wx.onSocketOpen(function(res) {
socketOpen = true
for (let i = 0; i < socketMsgQueue.length; i++){
sendSocketMessage(socketMsgQueue[i])
}
socketMsgQueue = []
})
function sendSocketMessage(msg) {
if (socketOpen) {
wx.sendSocketMessage({
data:msg
})
} else {
socketMsgQueue.push(msg)
}
}
参数说明:
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
data | string/ArrayBuffer | 是 | 需要发送的内容 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
data只能是string和arraybuffer,对于uint8array这种就识别不了,需要转换一下,类似这样:
socket.send({ data: Uint8Array.from([8,31,18,5,2,3]).buffer })
调用原生接口也需要自己转换,否则,微信就直接当做text发送了。而且数据块大小为0。