精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HTTP 輪詢 vs MQTT:SpringBoot 通信實踐

開發 前端
為優化普通輪詢的資源浪費問題,長輪詢對邏輯進行了調整:客戶端發送請求后,服務端不會立即返回響應,而是掛起請求(通常設置超時時間,如30秒);若期間有新數據,服務端立即返回響應;客戶端收到響應后,立即發起下一次長輪詢。

引言

在實時通信場景中,消息傳遞的效率、可靠性與資源占用一直是開發者關注的核心。從早期的HTTP輪詢到如今廣泛應用的MQTT協議,技術方案的演進始終圍繞更高效地實現端到端通信這一目標展開。

技術演進:為什么從 HTTP 輪詢走向 MQTT?

HTTP 輪詢:簡單但低效的被動通信

HTTP 協議作為互聯網的基礎協議,基于請求 - 響應模型設計,天然適合客戶端主動發起請求、服務端被動返回數據的場景。但在實時通信(如即時聊天、設備狀態監控、消息推送)中,為了獲取實時更新的數據,開發者不得不采用輪詢方案,常見的實現方式有兩種:

(1)普通輪詢(Polling)

客戶端按照固定時間間隔(如1秒、5秒)向服務端發送HTTP請求,查詢是否有新數據;服務端無論是否有數據,都會立即返回響應。

  • 核心問題:

資源浪費嚴重:大部分請求是無效請求(服務端無新數據),卻占用了網絡帶寬、服務端連接數與 CPU 資源;

實時性差:數據更新的延遲等于輪詢間隔(如5秒輪詢,延遲最高可達5秒),無法滿足低延遲場景需求。

(2)長輪詢(Long Polling)

為優化普通輪詢的資源浪費問題,長輪詢對邏輯進行了調整:客戶端發送請求后,服務端不會立即返回響應,而是掛起請求(通常設置超時時間,如30秒);若期間有新數據,服務端立即返回響應;客戶端收到響應后,立即發起下一次長輪詢。

  • 核心問題:

連接占用時間長:服務端需要維護大量掛起的HTTP連接,在高并發場景下會消耗大量內存與線程資源;

協議開銷大:HTTP請求頭(如Cookie、User-Agent)通常占整個請求體積的70%以上,即使僅傳遞少量數據,也需要攜帶完整的請求頭,帶寬利用率低;

不支持多對多通信:HTTP輪詢本質是客戶端 - 服務端的點對點通信,無法直接實現設備間、客戶端間的消息轉發。

MQTT:為實時、低耗通信而生

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是1999年誕生的輕量級發布 / 訂閱(Pub/Sub)協議,最初用于石油管道監控場景,如今已成為物聯網(IoT)、實時消息推送的主流協議。其設計目標是在帶寬有限、網絡不穩定的環境下,實現可靠的低功耗通信,核心特性完美解決了HTTP輪詢的痛點:

特性

說明

發布 / 訂閱模型

客戶端(發布者)不直接與接收者(訂閱者)通信,而是通過 “主題(Topic)” 轉發消息,支持多對多通信;

輕量級協議

協議頭最小僅 2 字節,遠低于 HTTP 的幾十 KB,帶寬利用率極高;

持久化連接

客戶端與服務端建立一次 TCP 連接后,可長期復用,無需頻繁建立連接,減少資源消耗;

QoS 服務質量

支持 3 級消息可靠性:QoS 0(最多一次)、QoS 1(至少一次)、QoS 2(恰好一次);

斷開重連與遺囑

客戶端異常斷開時,服務端可自動觸發遺囑消息(Last Will and Testament),通知其他訂閱者;

消息保留

服務端可保留某個主題的最新消息,新訂閱者上線后可直接獲取該消息,無需等待發布者再次發送;

實踐案例

核心組件:

  • MQTT服務端(Broker):負責接收、存儲、轉發消息,常見實現有Eclipse Mosquitto(開源輕量)、EMQX(企業級)、AWS IoT Core等;
  • MQTT客戶端:SpringBoot應用作為客戶端,實現發布消息與訂閱消息功能,常用客戶端庫為Eclipse Paho。

集成 MQTT 客戶端

引入依賴
<!-- MQTT客戶端 -->
<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.5</version>
</dependency>
配置 MQTT 連接參數
spring:
  mqtt:
    # MQTT服務端地址(tcp://ip:端口)
    broker-url: tcp://localhost:1883
    # 客戶端ID(必須唯一,建議添加隨機后綴避免沖突)
    client-id: springboot-mqtt-client-${random.uuid}
    # 用戶名(Mosquitto默認無密碼,若配置了認證需填寫)
    username: 
    # 密碼
    password: 
    # 默認訂閱的主題(可配置多個,用逗號分隔)
    default-topics: test/topic, device/status
    # QoS級別(0/1/2)
    qos: 1
    # 是否自動重連
    automatic-reconnect: true
    # 連接超時時間(毫秒)
    connection-timeout: 3000
    # 保持連接心跳時間(秒)
    keep-alive-interval: 60
編寫 MQTT 配置類:初始化客戶端
@Configuration
@ConfigurationProperties(prefix = "spring.mqtt") // 綁定application.yml中的配置
@Data
public class MqttConfig {

    private String brokerUrl;
    private String clientId;
    private String username;
    private String password;
    private String[] defaultTopics;
    private int qos;
    private boolean automaticReconnect;
    private int connectionTimeout;
    private int keepAliveInterval;

    /**
     * 初始化MQTT客戶端
     */
    @Bean
    public MqttClient mqttClient() throws MqttException {
        // 1. 創建連接選項
        MqttConnectOptions options = new MqttConnectOptions();
        // 設置用戶名密碼(若服務端無認證,可省略)
        if (username != null && !username.isEmpty()) {
            options.setUserName(username);
        }
        if (password != null && !password.isEmpty()) {
            options.setPassword(password.toCharArray());
        }
        // 設置自動重連、連接超時、心跳時間
        options.setAutomaticReconnect(automaticReconnect);
        options.setConnectionTimeout(connectionTimeout);
        options.setKeepAliveInterval(keepAliveInterval);
        // 禁用“清除會話”(確保斷開重連后,未接收的消息能繼續接收)
        options.setCleanSession(false);

        // 2. 創建MqttClient實例(MemoryPersistence表示消息持久化到內存)
        MqttClient client = new MqttClient(brokerUrl, clientId, new MemoryPersistence());

        // 3. 設置客戶端回調(處理連接成功、消息到達、連接丟失等事件)
        client.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                // 連接丟失時觸發(可在這里實現重連邏輯,不過options已配置自動重連)
                System.out.println("MQTT連接丟失:" + cause.getMessage());
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                // 收到訂閱的消息時觸發
                System.out.println("收到MQTT消息:");
                System.out.println("主題:" + topic);
                System.out.println("內容:" + new String(message.getPayload()));
                System.out.println("QoS級別:" + message.getQos());
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
                // 消息發布完成時觸發(僅QoS>0時有效)
                try {
                    if (token.isComplete()) {
                        System.out.println("消息發布成功:" + token.getMessageId());
                    }
                } catch (MqttException e) {
                    e.printStackTrace();
                }
            }
        });

        // 4. 連接服務端并訂閱默認主題
        client.connect(options);
        if (defaultTopics != null && defaultTopics.length > 0) {
            // 訂閱多個主題(第二個參數為QoS數組,與主題數組一一對應)
            int[] qosArray = new int[defaultTopics.length];
            for (int i = 0; i < defaultTopics.length; i++) {
                qosArray[i] = qos;
            }
            client.subscribe(defaultTopics, qosArray);
            System.out.println("MQTT連接成功,已訂閱主題:" + String.join(",", defaultTopics));
        }

        return client;
    }
}
編寫 MQTT 工具類:封裝發布 / 訂閱方法
@Component
public class MqttUtil {

    @Resource
    private MqttClient mqttClient;

    /**
     * 發布消息
     * @param topic 主題
     * @param payload 消息內容
     * @param qos QoS級別(0/1/2)
     * @param retained 是否保留消息(true:服務端保留最新消息,新訂閱者可獲取)
     */
    public void publish(String topic, String payload, int qos, boolean retained) throws MqttException {
        if (!mqttClient.isConnected()) {
            mqttClient.reconnect(); // 若連接斷開,先重連
        }
        // 創建MQTT消息
        MqttMessage message = new MqttMessage(payload.getBytes());
        message.setQos(qos);
        message.setRetained(retained);
        // 發布消息
        mqttClient.publish(topic, message);
    }

    /**
     * 訂閱主題(重載方法,使用默認QoS)
     */
    public void subscribe(String topic) throws MqttException {
        subscribe(topic, 1); // 默認QoS=1
    }

    /**
     * 訂閱主題
     */
    public void subscribe(String topic, int qos) throws MqttException {
        if (!mqttClient.isConnected()) {
            mqttClient.reconnect();
        }
        mqttClient.subscribe(topic, qos);
        System.out.println("已訂閱主題:" + topic + "(QoS:" + qos + ")");
    }

    /**
     * 取消訂閱主題
     */
    public void unsubscribe(String topic) throws MqttException {
        if (mqttClient.isConnected()) {
            mqttClient.unsubscribe(topic);
            System.out.println("已取消訂閱主題:" + topic);
        }
    }
}
編寫測試接口:驗證 MQTT 功能
@RestController
@RequestMapping("/mqtt")
public class MqttController {

    @Resource
    private MqttUtil mqttUtil;

    /**
     * 發布MQTT消息接口
     * @param topic 主題(如test/topic)
     * @param message 消息內容
     * @param qos QoS級別(0/1/2,默認1)
     * @return 發布結果
     */
    @PostMapping("/publish")
    public String publish(
            @RequestParam String topic,
            @RequestParam String message,
            @RequestParam(required = false, defaultValue = "1") int qos) {
        try {
            // 發布消息(retained=false:不保留消息)
            mqttUtil.publish(topic, message, qos, false);
            return"消息發布成功!主題:" + topic + ",內容:" + message;
        } catch (MqttException e) {
            e.printStackTrace();
            return"消息發布失敗:" + e.getMessage();
        }
    }
}

責任編輯:武曉燕 來源: 一安未來
相關推薦

2019-12-27 10:42:45

HTTPMQTT物聯網

2021-08-11 14:31:52

鴻蒙HarmonyOS應用

2017-03-28 10:20:24

Docker通信分析

2009-12-22 09:11:31

WCF雙向通信

2011-08-31 13:22:37

PhoneGapAndroidjavascript

2023-11-28 08:49:01

短輪詢WebSocket長輪詢

2018-08-17 06:13:16

物聯網協議MQTTMQTT-SN

2011-06-22 17:49:35

Linux Qt 串口

2023-06-20 14:04:59

2025-07-14 01:30:00

2024-07-11 16:49:43

同步通信異步通信通信

2023-08-01 08:43:29

Python多線程

2025-04-27 02:00:00

實時通信Nacos服務端

2023-09-07 14:59:42

物聯網MQTTCoAP

2023-04-07 09:28:04

Hi3861無線通信

2010-01-04 16:50:04

Silverlight

2011-04-22 10:30:11

VMwareWindowsFTP

2020-05-22 09:12:46

HTTP3網絡協議

2018-07-24 13:01:52

前端優化前端性能瀏覽器

2009-07-15 16:05:04

IP通信捷思銳科技Zed-3
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产一区在线| 999国产精品一区| 久久网站最新地址| 55夜色66夜色国产精品视频 | 久久久男人天堂| 国产日韩欧美综合一区| 91免费福利视频| www日韩精品| 波多野结衣在线播放一区| 欧美一区二区三区四区在线观看 | av电影在线地址| 9久草视频在线视频精品| 国产精品精品视频| 久久久久久久久久久网| 精品免费视频| 精品粉嫩超白一线天av| 三年中国国语在线播放免费| 亚洲wwwww| 国产欧美一区二区三区网站| 成人xxxxx色| 中文av免费观看| 亚洲精品四区| 久久综合电影一区| 熟女少妇内射日韩亚洲| 久久久久影视| 日韩欧美成人一区二区| 欧美性生活久久| 欧美精品在线一区| 不卡视频在线播放| 中日韩男男gay无套| 久久综合伊人77777蜜臀| 久久中文字幕精品| 午夜欧洲一区| 欧美精品一区二区三区视频| 亚洲一区二区中文字幕在线观看| 成人高清一区| 色妹子一区二区| 免费看国产曰批40分钟| 丁香高清在线观看完整电影视频| 18成人在线视频| 日韩欧美在线电影| 精品推荐蜜桃传媒| 久久综合色鬼综合色| 国产欧美日韩在线播放| 亚洲va久久久噜噜噜无码久久| 久久精品国产久精国产爱| 国产91精品在线播放| 久久午夜免费视频| 亚洲国产专区校园欧美| 久久久久久久久综合| 懂色av懂色av粉嫩av| 国产韩日影视精品| 久久亚洲一区二区三区四区五区高| 在线观看天堂av| 日韩欧美精品一区| 国产香蕉一区二区三区在线视频| 国产熟女高潮一区二区三区| 精品国产乱码久久久久久樱花| 制服丝袜成人动漫| 三上悠亚在线一区二区| av激情成人网| 欧美亚洲自拍偷拍| 国产精品视频中文字幕| 台湾天天综合人成在线| 91精品国产综合久久久久久| 97免费公开视频| 国产厕拍一区| 亚洲男人7777| 亚洲v国产v欧美v久久久久久| 欧美在线色图| 久久亚洲欧美日韩精品专区 | 欧美 亚欧 日韩视频在线 | 蜜桃av在线| 一本色道亚洲精品aⅴ| 黄色国产小视频| 在线观看亚洲精品福利片| 日韩一区二区电影| 中文字幕天堂网| 精品国产成人| www国产精品com| 久久精品国产亚洲av香蕉| 国产欧美短视频| 国产精品久久久久久av| 国产视频第一页| 91香蕉视频mp4| 欧美日韩一区二区三区在线视频 | 精品久久电影| 牛夜精品久久久久久久99黑人| 亚洲码在线观看| 大胸美女被爆操| 欧美日韩网址| 国产成人综合精品| 国产偷拍一区二区| 91麻豆6部合集magnet| 日韩在线三级| 色呦呦在线观看视频| 欧美性猛交xxxx免费看| 91av视频免费观看| 精品久久97| 播播国产欧美激情| 毛片在线免费视频| 激情五月激情综合网| 国产精品一区二区三区四区五区 | 黄色网一区二区| 色悠悠国产精品| 国产真实的和子乱拍在线观看| 日本视频中文字幕一区二区三区| 99国产视频| 国产特黄在线| 亚洲v日本v欧美v久久精品| 亚洲天堂网一区| 林ゆな中文字幕一区二区| 久久精品国产精品亚洲| www.色国产| 成人小视频免费观看| 亚洲天堂电影网| 伊人久久国产| 日韩一级黄色片| 青青青手机在线视频| 亚洲综合另类| 国产九色91| 97影院秋霞午夜在线观看| 一本色道**综合亚洲精品蜜桃冫| 精产国品一区二区三区| 大色综合视频网站在线播放| 羞羞色国产精品| www.xxx国产| 亚洲欧洲日韩女同| 久久久精品麻豆| 国产不卡一二三区| 欧美在线视频观看| 亚洲 国产 欧美 日韩| 亚洲午夜久久久久久久久久久 | 午夜a一级毛片亚洲欧洲| 久久99精品久久久久久噜噜 | 日本一区二区三区四区五区| 国产一区在线看| 一区精品在线| 国产成人福利夜色影视| 亚洲日本中文字幕免费在线不卡| 91精品国产乱码久久久张津瑜| 国产成人精品免费网站| 51xx午夜影福利| 日韩在线观看中文字幕| 欧美成人精品不卡视频在线观看| 91麻豆成人精品国产| 中文字幕在线观看不卡视频| 污污动漫在线观看| 亚洲二区三区不卡| 亚洲精品欧美日韩| 色呦呦在线播放| 精品88久久久久88久久久| 国产一级做a爱免费视频| 国产不卡一区视频| 欧美一级视频免费看| 欧美挤奶吃奶水xxxxx| 97视频免费在线看| 天堂资源最新在线| 色综合夜色一区| 日韩精品无码一区二区三区久久久| 性欧美videos另类喷潮| 欧美日韩国产免费一区二区三区| 一根才成人网| 在线视频国产日韩| 中文字幕一区二区久久人妻| 国产精品麻豆久久久| 亚洲精品20p| 欧美日韩免费| 久久久www免费人成黑人精品| av高清不卡| 中文字幕亚洲字幕| 超碰在线观看av| 欧美视频在线看| 国产三级在线观看完整版| 黄色小说综合网站| 男人添女荫道口图片| 亚洲成人一品| 91欧美激情另类亚洲| gogo高清午夜人体在线| 国产亚洲激情视频在线| 99久久久无码国产精品免费| 偷偷要91色婷婷| 欧美一区二区三区粗大| 国产a精品视频| 欧美牲交a欧美牲交aⅴ免费真| 成人女性视频| 肥熟一91porny丨九色丨| 性欧美gay| 成人97在线观看视频| 天堂av在线免费观看| 欧美日韩精品一区二区三区蜜桃 | 人妻体内射精一区二区| 久久成人精品无人区| www.亚洲成人网| 成人国产精品一级毛片视频| 大波视频国产精品久久| 成人在线视频播放| 久久色精品视频| 天堂a中文在线| 日韩欧美在线不卡| 中文在线a天堂| 精品福利视频导航| 欧美大片xxxx| 日本一区二区三区国色天香| 精品伦一区二区三区| 奇米一区二区三区| 成人在线免费观看av| 亚洲天堂免费| 亚洲精品久久久久久一区二区| 成人春色在线观看免费网站| 国产精品中文字幕久久久| 欧美一级鲁丝片| 九九热精品视频国产| 9i精品一二三区| 亚洲精品国偷自产在线99热| 国产麻豆免费观看| 欧洲一区二区三区在线| 国产福利拍拍拍| 夜夜爽夜夜爽精品视频| 日日操免费视频| 久久久不卡网国产精品二区| 国产精品久久久久久在线观看| 国内精品国产三级国产a久久| 一本久道综合色婷婷五月| 黄色av一区| 男人天堂成人网| 波多野结衣在线播放一区| 蜜桃成人在线| 久久夜色精品国产噜噜av小说| 91亚洲人电影| 日韩深夜福利网站| 国产成人精品优优av| 麻豆mv在线看| 2019中文字幕在线| av蜜臀在线| 午夜精品久久久久久久久久久久久| 黄色av电影在线观看| 在线亚洲午夜片av大片| 激情福利在线| 亚洲丝袜一区在线| 欧美日韩在线中文字幕| 亚洲乱码国产乱码精品精天堂| 手机看片福利在线| 亚洲激情自拍图| 天天操天天射天天| 亚洲精品国产福利| 亚欧在线观看视频| 亚洲精品日韩欧美| 黄色国产在线| 一区二区三欧美| 91亚洲欧美| www亚洲欧美| 中国av在线播放| 久久久亚洲精选| 日韩电影免费看| 45www国产精品网站| 一本大道色婷婷在线| 青青久久av北条麻妃黑人| 日本欧美日韩| 国产一区二区在线免费| 久久天堂久久| 国产综合av一区二区三区| 亚洲a级精品| 亚洲高清视频一区二区| 91精品国产91久久综合| 国产精品videossex国产高清| 亚洲黄页一区| 已婚少妇美妙人妻系列| 久久99久久久欧美国产| 奇米777在线| av影院午夜一区| 性猛交娇小69hd| 亚洲天天做日日做天天谢日日欢| 免费三片在线播放| 欧美日韩一区二区三区在线免费观看 | 亚洲欧美激情一区二区三区| 国产成人精品www牛牛影视| aa一级黄色片| 国产精品超碰97尤物18| 久久网免费视频| 色婷婷久久久亚洲一区二区三区| 中文字幕自拍偷拍| 精品久久五月天| 国产视频二区在线观看| 久久资源免费视频| 久久亚洲精品一区二区| 精品极品在线| 国产精品丝袜视频| 国产精品男女| 亚洲精品人成| 18成人免费观看视频| 91香蕉视频污版| 国产99久久久国产精品| 香蕉视频久久久| 一片黄亚洲嫩模| 中文字幕在线播放不卡| 亚洲成人av中文字幕| 在线观看麻豆| 欧美最猛性xxxxx免费| 精品入口麻豆88视频| 欧美三级华人主播| 极品裸体白嫩激情啪啪国产精品| 激情内射人妻1区2区3区| 成人晚上爱看视频| 手机看片国产日韩| 岛国av一区二区三区| 亚洲av综合色区无码一二三区| 在线亚洲国产精品网| 理论片午夜视频在线观看| 亚洲在线一区二区| 超碰成人久久| 久久久久久久久久久免费视频| 国产mv日韩mv欧美| 国产高潮国产高潮久久久91| 在线看不卡av| 日韩三级电影网| 午夜欧美不卡精品aaaaa| 精品国产一区二区三区2021| 亚洲精品成人自拍| 美女被久久久| 人妻少妇精品视频一区二区三区 | 国产专区在线视频| 久久精品久久综合| 日本免费www| 色狠狠综合天天综合综合| 天天爱天天干天天操| 欧美成人合集magnet| 青草综合视频| 亚洲国产一区二区精品视频| 性色一区二区| 星空大象在线观看免费播放| 亚洲欧美aⅴ...| 91欧美日韩麻豆精品| 在线成人一区二区| 日韩网站中文字幕| 久久婷婷开心| 日韩视频一区| 性色av蜜臀av浪潮av老女人| 亚洲精品videosex极品| 国产精品永久久久久久久久久| 中国人与牲禽动交精品| av有声小说一区二区三区| 麻豆精品蜜桃一区二区三区| 国产精品美女久久久| 疯狂揉花蒂控制高潮h| 日韩高清在线观看| 日本午夜激情视频| www.在线欧美| 91av在线免费视频| 亚洲欧美日韩在线一区| 精品91久久| 亚洲国产欧洲综合997久久| 日本sm残虐另类| 免费观看特级毛片| 欧美一区日韩一区| 欧美性受ⅹ╳╳╳黑人a性爽| 国产成人精品日本亚洲11| 国产精品国码视频| 99久久免费看精品国产一区| 色播五月激情综合网| av网站在线播放| 91亚洲人电影| 亚洲少妇在线| 欧美一区二区三区粗大| 91精品国产色综合久久| 后进极品白嫩翘臀在线播放| 精品视频免费观看| 日韩中文字幕亚洲一区二区va在线| 亚洲图片第一页| 日韩欧美一二三四区| 国产拍在线视频| 无遮挡亚洲一区| 国产精品一区二区果冻传媒| 亚洲天堂日韩av| 中文字幕亚洲无线码a| 日本在线一区二区三区| 熟女少妇在线视频播放| 欧美激情在线观看视频免费| 91九色蝌蚪91por成人| 久久久久久国产精品| 亚洲调教一区| 在线观看岛国av| 亚洲成人免费在线| 国产免费av高清在线| 91黄在线观看| 三级久久三级久久| 免费一级黄色大片| 亚洲午夜久久久久久久| 国产精品免费精品自在线观看| 国产3p露脸普通话对白| 国产精品久久免费看| 狠狠躁夜夜躁av无码中文幕| 国产精品久久激情| 国产精品99一区二区| 国产精品一二三区在线观看| 欧美一级日韩不卡播放免费| 在线天堂资源www在线污| 日本在线视频www色| 91蝌蚪porny成人天涯| 国产乱子伦精品无码码专区|