欢乐千炮捕鱼破解版|百乐千炮捕鱼游戏下载

首頁 > 上網技巧 > 電腦小技巧 > 如何在微信小程序的websocket上使用mqtt協議

如何在微信小程序的websocket上使用mqtt協議

時間:2019-07-25 15:49 作者:QQ地帶 我要評論

由于搜狗公司兄弟團隊的一個微信小程序要跑mqtt協議,我研究了下,結果如下:
 
一、打包出一個可以運行在微信小程序里的my_mqtt.js客戶端庫
第一步:
 
參考此庫官方說明: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;
    }
}
二、微信小程序里調用my_mqtt.js
var mqtt=require('../../utils/my_mqtt.js')
var client = mqtt.connect('wss://workyun.com/mqtt')
client.subscribe("mqtt/demo")
 
client.on("message", function (topic, payload) {
    console.log([topic, payload].join(": "))
    client.end()
})
 
client.publish("mqtt/demo", "hello workyun.com !")
三、用nginx處理微信小程序的websocket不支持HTTP頭:Sec-WebSocket-Protocol問題
nginx.conf:
 
location /mqtt {
    proxy_pass http://test.mosquitto.org:8080;
    proxy_redirect off;
    proxy_set_header Host test.mosquitto.org:8080;
 
    proxy_set_header Sec-WebSocket-Protocol mqtt;
    more_clear_headers Sec-WebSocket-Protocol;
 
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
http://test.mosquitto.org:8080是mqttjs官方給搭建的一個mqtt協議測試服務器,參見:MQTT on Websocket sample
 
你要是有你自己的mqtt服務器,請替換成您自己的,比如activeMQ服務器。

標簽: 微信小程序 WebSocket mqtt
頂一下
(0)
0%
踩一下
(0)
0%

Google提供的廣告

欢乐千炮捕鱼破解版 牛牛看牌抢庄有漏洞吗 广东11选5怎么玩稳赚 pc蛋蛋大小单双公式 查询时时彩历史数据 竞彩2串一稳 pk10冠军万能6码公式 三牛平台登陆 最新时时销量排行榜 快三大小单双的规律 恒达登录地址