如何在微信小程序的websocket上使用mqtt协议

如何在微信小程序的websocket上使用mqtt协议
最新回答
白首有我共你

2021-03-12 22:49:52

第一步:

参考此库官方说明:
https://github.com/mqttjs/MQTT.js#browserify


npm install -g webpack // install webpack

cd node_modules/mqtt

npm install . // install dev dependencies

webpack mqtt.js ./my_mqtt.js --output-library-target commonjs2
第二步:

将生成的my_mqtt.js文件里所有的:

(function() { return this; }())
替换为:

window
第三步:

在my_mqtt.js文件顶部加上代码:

var setImmediate = setTimeout;
var clearImmediate = clearTimeout;

var socketOpen = false
var socketMsgQueue = []
function sendSocketMessage(msg) {
console.log('send msg:', typeof msg)
console.log(msg);
if (socketOpen) {
wx.sendSocketMessage({
data: msg
})
} else {
socketMsgQueue.push(msg)
}
}

var document = {
URL: ''
}

var window = {
setTimeout: setTimeout,
clearTimeout: clearTimeout,

WebSocket: function (url) {
console.log('call window WebSocket', arguments)

var ws = {
send: sendSocketMessage,
close: wx.closeSocket,
onopen: null,
onmessage: null,
onclose: null,
onerror: null
}

wx.connectSocket({ url: url })
wx.onSocketOpen(function (res) {
console.log('收到onopen事件:', arguments)

socketOpen = true
for (var i = 0; i < socketMsgQueue.length; i++) {
sendSocketMessage(socketMsgQueue[i])
}
socketMsgQueue = []

ws.onopen && ws.onopen.apply(ws, arguments)
})
wx.onSocketMessage(function (res) {
console.log('收到onmessage事件:', arguments)
console.log(res.data)
ws.onmessage && ws.onmessage.apply(ws, arguments)
})
wx.onSocketClose(function () {
console.log('收到onclose事件:', arguments)
ws.onclose && ws.onclose.apply(ws, arguments)
})
wx.onSocketError(function () {
console.log('收到onerror事件:', arguments)
ws.onerror && ws.onerror.apply(ws, arguments)
})

return ws;
}
}