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

Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議

這篇具有很好參考價(jià)值的文章主要介紹了Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

MQTT是一個(gè)極其輕量級(jí)發(fā)布/訂閱消息傳輸協(xié)議,適用于網(wǎng)絡(luò)帶寬較低的場(chǎng)合.

通過(guò)一個(gè)代理服務(wù)器(broker),任何一個(gè)客戶端(client)都可以訂閱或者發(fā)布某個(gè)主題的消息,然后訂閱了該主題的客戶端則會(huì)收到該消息

業(yè)務(wù)場(chǎng)景

硬件采集的數(shù)據(jù)傳入EMQX平臺(tái)(采用MQTT協(xié)議),java通過(guò)代碼連接MQTT服務(wù)器,進(jìn)行采集數(shù)據(jù)接收、解析、業(yè)務(wù)處理、存儲(chǔ)入庫(kù)、數(shù)據(jù)展示。

MQTT 是基于?發(fā)布(Publish)/訂閱(Subscribe)?模式來(lái)進(jìn)行通信及數(shù)據(jù)交換的。

什么是MQTT

MQTT是基于二進(jìn)制消息的發(fā)布/訂閱編程模式的消息協(xié)議,最早由IBM提出的,如今已經(jīng)成為OASIS規(guī)范。由于規(guī)范很簡(jiǎn)單,非常適合需要低功耗和網(wǎng)絡(luò)帶寬有限的IoT場(chǎng)景,比如:

  • 遙感數(shù)據(jù)
  • 汽車
  • 智能家居
  • 智慧城市
  • 醫(yī)療醫(yī)護(hù)

由于物聯(lián)網(wǎng)的環(huán)境是非常特別的,所以MQTT遵循以下設(shè)計(jì)原則:

  1. 精簡(jiǎn),不添加可有可無(wú)的功能。
  2. 發(fā)布/訂閱(Pub/Sub)模式,方便消息在傳感器之間傳遞。
  3. 允許用戶動(dòng)態(tài)創(chuàng)建主題,零運(yùn)維成本。
  4. 把傳輸量降到最低以提高傳輸效率。
  5. 把低帶寬、高延遲、不穩(wěn)定的網(wǎng)絡(luò)等因素考慮在內(nèi)。
  6. 支持連續(xù)的會(huì)話控制。
  7. 理解客戶端計(jì)算能力可能很低。
  8. 提供服務(wù)質(zhì)量管理。
  9. 假設(shè)數(shù)據(jù)不可知,不強(qiáng)求傳輸數(shù)據(jù)的類型與格式,保持靈活性。Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)

MQTT與HTTP的區(qū)別

首先看一下HTTP請(qǐng)求:

Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)

  • HTTP 是一種同步協(xié)議??蛻舳诵枰却?wù)器響應(yīng)。Web 瀏覽器具有這樣的要求,但它的代價(jià)是犧牲了可伸縮性。
  • HTTP 是單向的??蛻舳吮仨毎l(fā)起連接。
  • HTTP 是一種 1-1 協(xié)議??蛻舳税l(fā)出請(qǐng)求,服務(wù)器進(jìn)行響應(yīng)。將消息傳送到網(wǎng)絡(luò)上的所有設(shè)備上,不但很困難,而且成本很高。
  • HTTP 是一種有許多標(biāo)頭和規(guī)則的重量級(jí)協(xié)議。它不適合受限的網(wǎng)絡(luò)。

再來(lái)看一下MQTT:?

????????在 IoT 領(lǐng)域,大量設(shè)備以及很可能不可靠或高延遲的網(wǎng)絡(luò)使得同步通信成為問(wèn)題。異步消息協(xié)議更適合 IoT 應(yīng)用程序。傳感器發(fā)送讀數(shù),讓網(wǎng)絡(luò)確定將其傳送到目標(biāo)設(shè)備和服務(wù)的最佳路線和時(shí)間。在 IoT 應(yīng)用程序中,設(shè)備或傳感器通常是客戶端,這意味著它們無(wú)法被動(dòng)地接收來(lái)自網(wǎng)絡(luò)的命令。

Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)

MQTT的核心: 發(fā)布和訂閱模型?

MQTT 協(xié)議在網(wǎng)絡(luò)中定義了兩種實(shí)體類型:一個(gè)消息代理和一些客戶端。

代理是一個(gè)服務(wù)器,它從客戶端接收所有消息,然后將這些消息路由到相關(guān)的目標(biāo)客戶端。

客戶端是能夠與代理交互來(lái)發(fā)送和接收消息的任何事物??蛻舳丝梢允乾F(xiàn)場(chǎng)的 IoT 傳感器,或者是數(shù)據(jù)中心內(nèi)處理 IoT 數(shù)據(jù)的應(yīng)用程序。

  1. 客戶端連接到代理。它可以訂閱代理中的任何消息“主題”。此連接可以是簡(jiǎn)單的 TCP/IP 連接,也可以是用于發(fā)送敏感消息的加密 TLS 連接。
  2. 客戶端通過(guò)將消息和主題發(fā)送給代理,發(fā)布某個(gè)主題范圍內(nèi)的消息。
  3. 代理然后將消息轉(zhuǎn)發(fā)給所有訂閱該主題的客戶端。

????????同時(shí),MQTT 是輕量級(jí)的。它有一個(gè)用來(lái)指定消息類型的簡(jiǎn)單標(biāo)頭,有一個(gè)基于文本的主題,還有一個(gè)任意的二進(jìn)制有效負(fù)載。應(yīng)用程序可對(duì)有效負(fù)載采用任何數(shù)據(jù)格式,比如 JSON、XML、加密二進(jìn)制或 Base64,只要目標(biāo)客戶端能夠解析該有效負(fù)載。

Java實(shí)例

1.通過(guò)包管理工具 Maven導(dǎo)入依賴

<dependency>
  <groupId>org.eclipse.paho</groupId>
  <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
  <version>1.2.2</version>
</dependency>

?2.編寫訂閱方的代碼,并啟動(dòng)。

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;


/**
 * 訂閱方
 */
public class SubscribeSample {
    public static void main(String[] args) {
        //EMQ X 默認(rèn)端口 1883
        String broker = "tcp://broker.emqx.io:1883";
        String TOPIC = "test";
        int qos = 1;
        String clientid = "subClient";
        String userName = "admin";
        String passWord = "password";
        try {
            // host為主機(jī)名,test為clientid即連接MQTT的客戶端ID,一般以客戶端唯一標(biāo)識(shí)符表示,MemoryPersistence設(shè)置clientid的保存形式,默認(rèn)為以內(nèi)存保存
            MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());
            // MQTT的連接設(shè)置
            MqttConnectOptions options = new MqttConnectOptions();
            // 設(shè)置是否清空session,這里如果設(shè)置為false表示服務(wù)器會(huì)保留客戶端的連接記錄,這里設(shè)置為true表示每次連接到服務(wù)器都以新的身份連接
            options.setCleanSession(true);
            // 設(shè)置連接的用戶名
            options.setUserName(userName);
            // 設(shè)置連接的密碼
            options.setPassword(passWord.toCharArray());
            // 設(shè)置超時(shí)時(shí)間 單位為秒
            options.setConnectionTimeout(10);
            // 設(shè)置會(huì)話心跳時(shí)間 單位為秒 服務(wù)器會(huì)每隔1.5*20秒的時(shí)間向客戶端發(fā)送個(gè)消息判斷客戶端是否在線,但這個(gè)方法并沒(méi)有重連的機(jī)制
            options.setKeepAliveInterval(20);
            // 設(shè)置回調(diào)函數(shù)
            client.setCallback(new MqttCallback() {

                public void connectionLost(Throwable cause) {
                    System.out.println("connectionLost");
                }

                public void messageArrived(String topic, MqttMessage message) {
                    System.out.println("======監(jiān)聽到來(lái)自[" + topic + "]的消息======");
                    System.out.println("message content:"+new String(message.getPayload()));
                    System.out.println("============");
                }

                public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("deliveryComplete---------"+ token.isComplete());
                }

            });

            // 建立連接
            System.out.println("連接到 broker: " + broker);
            client.connect(options);

            System.out.println("連接成功.");
            //訂閱消息
            client.subscribe(TOPIC, qos);
            System.out.println("開始監(jiān)聽" + TOPIC);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

啟動(dòng)訂閱方運(yùn)行結(jié)果如下:

?Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)

3.編寫發(fā)布方的代碼并啟動(dòng)

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

/**
 * 發(fā)布方
 */
public class PublishSample {
    public static void main(String[] args) {

        String topic = "test";
        String content = "你好,我給你發(fā)了條消息呀?。。。。。。。。。?!";
        int qos = 1;
        String broker = "tcp://broker.emqx.io:1883";
        String userName = "admin";
        String password = "password";
        String clientId = "pubClient";
        // 內(nèi)存存儲(chǔ)
        MemoryPersistence persistence = new MemoryPersistence();

        try {
            // 創(chuàng)建客戶端
            MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
            // 創(chuàng)建鏈接參數(shù)
            MqttConnectOptions connOpts = new MqttConnectOptions();
            // 在重新啟動(dòng)和重新連接時(shí)記住狀態(tài)
            connOpts.setCleanSession(false);
            // 設(shè)置連接的用戶名
            connOpts.setUserName(userName);
            connOpts.setPassword(password.toCharArray());
            // 建立連接
            System.out.println("連接到 broker: " + broker);
            sampleClient.connect(connOpts);
            System.out.println("連接成功.");
            // 創(chuàng)建消息
            MqttMessage message = new MqttMessage(content.getBytes());
            // 設(shè)置消息的服務(wù)質(zhì)量
            message.setQos(qos);
            // 發(fā)布消息
            System.out.println("向" + topic + "發(fā)送消息:" + message);
            sampleClient.publish(topic, message);
            // 斷開連接
            sampleClient.disconnect();
            // 關(guān)閉客戶端
            sampleClient.close();
        } catch (MqttException me) {
            System.out.println("reason " + me.getReasonCode());
            System.out.println("msg " + me.getMessage());
            System.out.println("loc " + me.getLocalizedMessage());
            System.out.println("cause " + me.getCause());
            System.out.println("excep " + me);
            me.printStackTrace();
        }
    }
}

?

啟動(dòng)發(fā)布方運(yùn)行結(jié)果如下:

Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)

4.最后查看訂閱方的控制臺(tái),訂閱方收到消息

?Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議,物聯(lián)網(wǎng)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-698431.html

到了這里,關(guān)于Java實(shí)踐-物聯(lián)網(wǎng)loT入門-MQTT傳輸協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • (阿里云)STM32L+BC20+MQTT協(xié)議傳輸溫濕度,ADC,電壓,GPS數(shù)據(jù)到阿里云物聯(lián)網(wǎng)平臺(tái)

    (阿里云)STM32L+BC20+MQTT協(xié)議傳輸溫濕度,ADC,電壓,GPS數(shù)據(jù)到阿里云物聯(lián)網(wǎng)平臺(tái)

    1、材料準(zhǔn)備 準(zhǔn)備以下材料 2、設(shè)備連接 2.1 插入物聯(lián)網(wǎng)卡 首先把BC20核心板從開發(fā)板上拆下來(lái) 然后將物聯(lián)卡放置在BC20核心板內(nèi) 物聯(lián)卡放置完成將BC20核心板重新插入到開發(fā)板內(nèi)(注意不要弄錯(cuò)方向) 同時(shí)接入天線 2.2 連接ST-Link仿真器 用3條杜邦線接入STM32L的 DIO、GND、CLK中 另

    2024年02月16日
    瀏覽(32)
  • Java 物聯(lián)網(wǎng)協(xié)議MQTT和 CoAP

    Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. java IOT 協(xié)議是大家非常熟悉的一種的協(xié)議。 需求: 1.概述 2. 協(xié)議分類 1.概述 物聯(lián)網(wǎng)核心組成就是物聯(lián)設(shè)備、網(wǎng)關(guān)和云端

    2024年01月25日
    瀏覽(19)
  • 基于python的EC800物聯(lián)網(wǎng)mqtt協(xié)議開發(fā)指南:從入門到實(shí)戰(zhàn)(1)

    基于python的EC800物聯(lián)網(wǎng)mqtt協(xié)議開發(fā)指南:從入門到實(shí)戰(zhàn)(1)

    由于工作需要,開啟了一個(gè)物聯(lián)網(wǎng)開發(fā)的小項(xiàng)目,4G模塊是EC800M,由于本人也是從0開始接觸物聯(lián)網(wǎng)開發(fā),所以將會(huì)把整個(gè)系統(tǒng)的搭建流程分享出來(lái)供大家參考,有合作意向的同仁們也可以隨時(shí)私信我。 1. 開發(fā)板 ????????? EC800的開發(fā)板,網(wǎng)上幾十塊錢一個(gè),淘寶直接搜索

    2024年04月10日
    瀏覽(23)
  • 物聯(lián)網(wǎng)協(xié)議之COAP簡(jiǎn)介及Java實(shí)踐

    物聯(lián)網(wǎng)協(xié)議之COAP簡(jiǎn)介及Java實(shí)踐

    目錄 前言 一、COAP簡(jiǎn)介 1、關(guān)于COAP ?2、COAP特點(diǎn) 3、基于COAP的NB-IoT接入流程 二、CoAP協(xié)議JAVA實(shí)踐 1、californium介紹 2、Java集成? 3、Maven 資源引入 4、定義Server端 5、Client調(diào)用 6、運(yùn)行測(cè)試 總結(jié) ? ? ? ? 今天平安夜,祝大家圣誕快樂(lè),平平安安。最近幾年,隨著物聯(lián)網(wǎng)的興起,很

    2024年02月04日
    瀏覽(16)
  • MQTT文件傳輸-2. 協(xié)議篇

    2.1 協(xié)議框架 2.2 主題 2.3 Payload協(xié)議設(shè)計(jì) 2.3.1 基本格式 說(shuō)明: id: 由數(shù)據(jù)包主動(dòng)發(fā)起方各自維護(hù),應(yīng)答數(shù)據(jù)包的id需要跟請(qǐng)求包一致。 type: 數(shù)據(jù)包類型區(qū)分的。 parm: 參數(shù)詳情根據(jù)type的不同而變化。 UUID: 設(shè)備唯一ID 2.3.2 文件信息傳輸 說(shuō)明: type: fileInfo 文件信息傳輸包。

    2024年02月11日
    瀏覽(14)
  • 什么是MQTT,物聯(lián)網(wǎng)MQTT協(xié)議詳解

    什么是MQTT,物聯(lián)網(wǎng)MQTT協(xié)議詳解

    老俊目前正在從事物聯(lián)網(wǎng)行業(yè),對(duì)MQTT有一定的了解,本文為您簡(jiǎn)述什么是MQTT,以及MQTT怎么使用 物聯(lián)網(wǎng) (IoT) 和機(jī)器對(duì)機(jī)器 (M2M) 通信對(duì)我們與技術(shù)交互的方式產(chǎn)生了持久影響。到 2022 年底,全球連接的物聯(lián)網(wǎng)設(shè)備數(shù)量增長(zhǎng)了 18%,達(dá)到 144 億, 到 2025 年估計(jì)連接的物聯(lián)網(wǎng)設(shè)備將

    2024年02月12日
    瀏覽(28)
  • 【物聯(lián)網(wǎng)協(xié)議】MQTT

    MQTT是一種基于發(fā)布/訂閱模式的協(xié)議,其中客戶端(稱為發(fā)布者)向主題發(fā)布消息,并允許其他客戶端(稱為訂閱者)從這些主題訂閱消息。MQTT支持多個(gè)QoS級(jí)別以及最后遺愿消息(LWT)等高級(jí)特性。 MQTT客戶端通常需要與MQTT代理服務(wù)器進(jìn)行通信以發(fā)布或訂閱消息。它們可以運(yùn)

    2024年02月02日
    瀏覽(40)
  • 物聯(lián)網(wǎng)協(xié)議之MQTT

    物聯(lián)網(wǎng)協(xié)議之MQTT

    MQTT 可以簡(jiǎn)單看做一個(gè)網(wǎng)絡(luò)協(xié)議,用于 機(jī)器對(duì)機(jī)器 的通信(與客戶端到服務(wù)器的傳輸有點(diǎn)區(qū)別)。智能傳感器、可穿戴設(shè)備和其他物聯(lián)網(wǎng)(IoT)設(shè)備通常必須通過(guò) 帶寬有限 的 資源受限 網(wǎng)絡(luò)傳輸和接收數(shù)據(jù)。這些物聯(lián)網(wǎng)設(shè)備使用 MQTT 進(jìn)行數(shù)據(jù)傳輸,因?yàn)樗子趯?shí)施,并且可

    2024年02月05日
    瀏覽(20)
  • 【物聯(lián)網(wǎng)開發(fā)】-微信小程序之MQTT連接,基于MQTT實(shí)現(xiàn)設(shè)備-服務(wù)器-小程序的消息傳輸

    【物聯(lián)網(wǎng)開發(fā)】-微信小程序之MQTT連接,基于MQTT實(shí)現(xiàn)設(shè)備-服務(wù)器-小程序的消息傳輸

    想要開發(fā)微信小程序,首先要有一些基礎(chǔ)知識(shí):html、cs、js、json等,小程序中要用到的知識(shí)框架大體相同,一個(gè)頁(yè)面包括js、json、wxml、wxss格式的文件。 由于本人此前從未接觸過(guò)小程序開發(fā),本篇文章將會(huì)以新手小白的角度一步步剖析如何使用微信小程序通過(guò)MQTT服務(wù)器連接設(shè)

    2023年04月24日
    瀏覽(97)
  • 穿越物聯(lián)網(wǎng)的迷霧:深入理解MQTT協(xié)議

    穿越物聯(lián)網(wǎng)的迷霧:深入理解MQTT協(xié)議

    在物聯(lián)網(wǎng)(IoT)的海洋中,數(shù)據(jù)像水流一樣流動(dòng),連接成千上萬(wàn)個(gè)設(shè)備,使它們能夠“交流”并執(zhí)行任務(wù)。要實(shí)現(xiàn)這種無(wú)縫的交流,需要一個(gè)高效、輕量級(jí)的通信協(xié)議,而MQTT(Message Queuing Telemetry Transport)正是這樣一種協(xié)議。本篇博客將深入探索MQTT的世界,從它的基礎(chǔ)原理到

    2024年04月25日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包