国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序集成和使用mqtt(同時支持uniapp和原生)

這篇具有很好參考價值的文章主要介紹了微信小程序集成和使用mqtt(同時支持uniapp和原生)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

? ? ? ?在集成mqtt到小程序的開發(fā)過程中,確實走了不少彎路,下了許許多多的示例,一步步踩坑到現(xiàn)在終于完美解決了小程序引入mqtt的方法。該方法原生和uniapp均適用。

1. 小程序網(wǎng)頁配置

先登錄微信公眾平臺,找到開發(fā)》開發(fā)管理》開發(fā)設(shè)置頁面

uniapp mqtt,微信小程序,uni-app,小程序

?

服務(wù)器域名配置中 配置socket合法域名為,mq消息服務(wù)器的域名。然后保存退出。

2.代碼集成

1.新建mqtt文件夾,下載paho-mqtt.js,把這個js放在新建的文件夾下。

下載地址https://download.csdn.net/download/qq_35921773/33237463 ?

2.然后新建mqtt.js用來初始化自己的連接信息

把mqtt.js和paho-mqtt.js放在同級文件夾下。這樣方便引入

let Paho = require('./paho-mqtt.js');
var mqtt = {};
//client對象
var client = null;
//mqtt連接對象
const mqttUrl = {
    hostname: "xxx.cn",
    port:8084,
    path: "/mqtt"
}
 
//訂閱的主題與回掉方法
var map = new Map();
 
/**
 * mqtt 連接狀態(tài)
 * 0:正在連接
 * 1:連接成功建立
 * 2:連接正在關(guān)閉
 * 3:連接已經(jīng)關(guān)閉
 */
let connectStatus = 0;
 
//初始化weboscket
mqtt.initMqtt = () => {
    if (null == client) {
        //創(chuàng)建mqtt客戶端
        client = new Paho.Client(mqttUrl.hostname, Number(mqttUrl.port), mqttUrl.path, 'wxapp_client_'+Math.random(),);
    } else {
        //Do-nothing
    }
 
    client.onConnected = (reconnect, uri) => {
        console.log("mqtt連接成功!client:", reconnect, uri);
        //連接成功
        connectStatus = 1;
        //注冊全局的報警事件
    }
 
    client.onConnectionLost = (responseObject) => {
        console.log("mqtt連接關(guān)閉!", responseObject);
        if (responseObject.errorCode != 0) {
            //異常關(guān)閉
            mqtt.initMqtt();
        } else {
            //正常關(guān)閉連接
        }
        connectStatus = 3;
    }
 
 
 
    client.onMessageArrived = (message) => {
        //console.log("Message Recieved: [Topic: ", message.destinationName, ", Payload: ", message.payloadString, ", QoS: ", message.qos, ", Retained: ", message.retained, ", Duplicate: ", message.duplicate, "]");
        let topic = message.destinationName;
        //console.log("map:",map);
        try {
            let msgObj = {}
            new Promise((resolve, reject) => {/* executor函數(shù) */
                msgObj = JSON.parse(message.payloadString);
                resolve(msgObj);
            }).catch(function (value) {
                console.log('JSON轉(zhuǎn)化異常')
                return;
            });
            if(topic.indexOf('$SYS/brokers/')>-1){
                map.get('home')(topic,msgObj);
            }else if(topic.indexOf('/client')>-1){
                map.get('device')(topic,msgObj);
            }
        } catch (err) {
            console.error(err);
        }
 
    }
 
 
    var options = {
        invocationContext: {
            host: mqttUrl.hostname,
            port: mqttUrl.port,
            path: mqttUrl.path,
            clientId: 'wxapp_client_'+Math.random(),
        },
        //超時
        timeout: 5,
        //心跳
        keepAliveInterval: 60,
        //清除session,如果不清除,重連之后還能收到訂閱的數(shù)據(jù)
        cleanSession: true,
        useSSL:true,
        reconnect: true,
        onSuccess: onConnect,
        onFailure: onFail
    };
 
    function onConnect(context) {
        console.log("mqtt連接成功context:", context)
        //連接成功
        connectStatus = 1;
    }
 
    function onFail(context) {
        console.log("mqtt連接失敗onFail:", context)
        mqtt.initMqtt();
    }
 
    if (1 != connectStatus) {
        console.log("開始連接");
        client.connect(options);
        //正在建立連接
        connectStatus = 0;
    }
 
 
}
 
 
/**
 * 訂閱主題
 * topic:主題名稱
 * qos:服務(wù)質(zhì)量
 */
mqtt.subscribe = function(topic, qos, receiveCallback) {
    if (1 == mqtt.getStatus()) {
        client.subscribe(topic, {
            qos: Number(qos)
        });
        if(topic.indexOf('$SYS/brokers/')>-1){
            map.set('home',receiveCallback);
        }else if(topic.indexOf('/client')>-1){
            map.set('device',receiveCallback);
        }
    } else {
        setTimeout(function() {
            mqtt.subscribe(topic, qos, receiveCallback);
        }, 1000)
    }
}
 
/**
 * 取消訂閱主題
 * topic:主題名稱
 */
mqtt.unsubscribe = function(topic) {
    if (1 == mqtt.getStatus()) {
        client.unsubscribe(topic, {
            onSuccess: unsubscribeSuccess,
            onFailure: unsubscribeFailure,
            invocationContext: {
                topic: topic
            }
        });
        map.delete(topic);
    } else {
        setTimeout(function() {
            mqtt.unsubscribe(topic);
        }, 1000)
    }
}
 
function unsubscribeSuccess(context) {
    console.log("取消訂閱成功Topic:", context.invocationContext.topic);
}
 
function unsubscribeFailure(context) {
    console.log("取消訂閱成功Topic:", context.invocationContext.topic);
    setTimeout(function() {
        mqtt.unsubscribe(context.invocationContext.topic);
    }, 1000)
}
 
/**
 * 發(fā)送消息
 * message:消息內(nèi)容
 * topic:主題
 * qos:服務(wù)質(zhì)量
 */
mqtt.publish = function(message, topic, qos) {
    if (1 == mqtt.getStatus()) {
        var message = new Paho.Message(message);
        message.destinationName = topic;
        message.qos = Number(qos);
        message.retained = false;
        client.send(message);
        wx.showToast({
            title: '發(fā)送成功'
        })
    } else {
        wx.showToast({
            title: '正在重新連接服務(wù)器,請稍后重試',
            icon: 'none',
            duration: 2000
        })
        setTimeout(function() {
            mqtt.publish(message, topic, qos);
        }, 1000)
    }
}
 
 
/**
 * 返回mqtt的連接狀態(tài)
 */
mqtt.getStatus = function() {
    return connectStatus;
}
 
 
 
/**
 * 關(guān)閉連接
 */
mqtt.disconnect = function() {
    console.log("關(guān)閉mqtt連接");
    if (null != client) {
        client.disconnect();
    } else {
        //Do-nothing
    }
    connectStatus = 3;
    client = null;
}
 
mqtt.initMqtt();
 
export default mqtt;

3.頁面使用

import mqtt from '../../common/utils/mqtt.js'
//指向剛才新建的mqtt.js
 
//onLoad初始化訂閱
onLoad(option) {
   mqtt.subscribe('$SYS/brokers/+/clients/#', 0, this.receiveCallback); 
},
 
methods: {
    //收到消息后的回調(diào)
     receiveCallback(){
          console.log('addad')
     },
}

?內(nèi)外網(wǎng)切換BAT腳本

1. 切換內(nèi)網(wǎng)腳本

uniapp mqtt,微信小程序,uni-app,小程序

BAT腳本設(shè)置IP、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS

@echo off
cls
color 0A
Echo *******************************************************************************
Echo           正在修改IP地址和DNS服務(wù)器地址,請耐心等待…………
Echo *******************************************************************************
cmd /c netsh interface ip set address name="以太網(wǎng)" source=static addr=27.195.110.187 mask=255.255.255.0 gateway=27.195.110.254 gwmetric=1
cmd /c netsh interface ip set dns "以太網(wǎng)" static 26.195.232.1 primary
ipconfig /all
Echo *******************************************************************************
Echo          OK!!已修改成功!請按任意鍵繼續(xù)…………
Echo *******************************************************************************

2. 切換外網(wǎng)腳本(IP自動獲?。?/h4>
@echo off
cls
color 0A
Echo *******************************************************************************
Echo           正在修改IP地址和DNS服務(wù)器地址,請耐心等待…………
Echo *******************************************************************************
netsh interface ip set address name="以太網(wǎng) 4" source=dhcp
netsh interface ip delete dns "以太網(wǎng) 4" all
ipconfig /flushdns
ipconfig /all
Echo *******************************************************************************
Echo          OK??!已修改成功!請按任意鍵繼續(xù)…………
Echo *******************************************************************************

?文章來源地址http://www.zghlxwxcb.cn/news/detail-729148.html

到了這里,關(guān)于微信小程序集成和使用mqtt(同時支持uniapp和原生)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序使用MQTT的小例子

    微信小程序使用MQTT的小例子

    本文章大部分內(nèi)容來自MQTT官方教程,有需要的可以去MQTT官網(wǎng)查看,這里只分享一下自己的使用過程。謝謝大家觀看! 首先我們使用微信開發(fā)者工具創(chuàng)建一個空項目。 不使用云開發(fā),不使用模板。 然后我們?nèi)QTT網(wǎng)址,或者下方鏈接下載mqtt.mini.js 這個可以下載mqtt.mini.js http

    2024年04月13日
    瀏覽(20)
  • 采用uniapp實現(xiàn)的銀行卡卡片, 支持H5和微信小程序

    采用uniapp實現(xiàn)的銀行卡卡片, 支持H5和微信小程序

    采用uniapp-vue3實現(xiàn)的銀行卡卡片 支持H5、微信小程序(其他小程序未測試過,可自行嘗試) 可用于參考學(xué)習(xí) 可到插件市場下載嘗試: https://ext.dcloud.net.cn/plugin?id=16736 使用示例

    2024年02月22日
    瀏覽(88)
  • 微信小程序使用mqtt開發(fā)可以,真機(jī)不行

    微信小程序使用mqtt開發(fā)可以,真機(jī)不行

    以下可以解決我的問題,請一步一步跟著做,有可能版本不一樣就失敗了 前往藍(lán)奏云 https://wwue.lanzouo.com/iQPdc1k50hpe 下載好后將.txt改為.js 然后放入項目里 emqx官網(wǎng) 需要有ssl證書 注意,每一步都是有用的哦,如果你的不行,那么就原樣復(fù)制一下

    2024年02月02日
    瀏覽(26)
  • uniapp 發(fā)送全文件 支持App端ios、android,微信小程序,H5

    由于uniapp提供的API在app端只能上傳圖片和視頻,不能上傳其他文件,說以只能借助插件了。 ?ios端用的這個插件 獲取到文件對象 免費的 ios-uniapp 文件選取word,pdf,xls等文件 - DCloud 插件市場 uniapp iOS文件選取 iOS選取text,pdf,word,doc,xls,ppt https://ext.dcloud.net.cn/plugin?id=1311 這個是返回一

    2024年02月16日
    瀏覽(88)
  • 解決uniapp編譯的微信小程序不支持v-bind=“$attrs“

    原生組件無法支持v-bind;用戶自定義組件以及第三方擴(kuò)展組件才支持v-bind v-model屬性 在高版本的vue3+vite中使用父組件傳遞下來的props中的某一個屬性,作為當(dāng)前組件的子組件的v-model入?yún)?,那么將會報錯 [vite] [plugin:vite:vue] v-model cannot be used on a prop, because local prop bindings are not wr

    2024年02月08日
    瀏覽(381)
  • 開源若依+uniapp商城支持微信小程序/H5/微信支付/商品管理/訂單管理/會員管理

    開源若依+uniapp商城介紹支持微信小程序/H5/微信支付/商品管理/訂單管理/會員管理 建議兩倍速度觀看!??! 訪問地址:https://mall.ichengle.top/ 源碼地址:https://gitee.com/zccbbg/RuoYi-Mall 若依(Ruoyi)是一個基于Java開發(fā)的快速開發(fā)腳手架(框架),旨在幫助開發(fā)者更輕松地構(gòu)建企業(yè)級

    2024年02月07日
    瀏覽(229)
  • uniapp項目編譯成H5后跳轉(zhuǎn)到微信小程序(支持微信掃碼、支付寶掃碼)

    uniapp項目編譯成H5后跳轉(zhuǎn)到微信小程序(支持微信掃碼、支付寶掃碼)

    uniapp項目編譯成 H5 后跳轉(zhuǎn)到 微信小程序 (支持微信H5、支付寶H5) 場景:1、微信掃碼跳轉(zhuǎn)到該H5中后點擊某事件(或者不點擊直接跳轉(zhuǎn))需要跳轉(zhuǎn)到微信小程序;2、支付寶掃碼跳轉(zhuǎn)到H5中后點擊某事件(或者不點擊直接跳轉(zhuǎn))需要跳轉(zhuǎn)到微信小程序 思路:調(diào)用后端接口返回

    2024年02月13日
    瀏覽(96)
  • uniapp微信小程序 圖片&文件上傳并且支持圖片和文件預(yù)覽(pdf等文件預(yù)覽)巨細(xì)教學(xué)!

    首先呢,小程序打開pdf等文件有下面幾種辦法: 用微信自帶的wx.downloadFile() + wx.openDocument() 使用web-view,uni-app中webview可以直接加載pdf文件 可以使用網(wǎng)上說的pdf.js去實現(xiàn)(我沒有用到這個,就不介紹了) 網(wǎng)上查到很多資料顯示安卓是可以通過上面第一種辦法,但是ios用第一個

    2024年02月04日
    瀏覽(102)
  • MQTT通訊-使用EMQX將ESP8266與微信小程序通訊

    MQTT通訊-使用EMQX將ESP8266與微信小程序通訊

    MQTT MQTT(Message Queuing Telemetry Transport)是一種基于發(fā)布/訂閱范式的“輕量級”消息協(xié)議,由IBM發(fā)布。MQTT可以在TCP/IP協(xié)議族上工作,并且是為硬件性能低下的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)狀況糟糕的情況下而設(shè)計的發(fā)布/訂閱型消息協(xié)議。因此,MQTT協(xié)議適用于硬件性能低下的遠(yuǎn)程設(shè)備以及

    2024年04月14日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包