精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩和欧美一区二区| 成人午夜在线| 26uuu亚洲| 国产精品入口夜色视频大尺度| 嘿嘿视频在线观看| 亚洲开心激情| 欧美日韩在线视频一区| 亚洲精品成人a8198a| 亚洲精品18p| 日本网站在线观看一区二区三区 | 4444欧美成人kkkk| 中文字幕免费视频| 8x国产一区二区三区精品推荐| 精品国产乱码久久久久久天美| 亚洲欧洲精品一区二区三区波多野1战4 | 在线成人h网| 色婷婷综合成人| 亚洲制服丝袜在线播放| 亚洲欧美在线人成swag| 午夜精品123| 中文字幕第一页亚洲| 神马亚洲视频| 国产成人自拍在线| 国产精品欧美一区二区三区奶水| 久久精品视频9| 久久影院一区| 亚洲人线精品午夜| 五月天丁香社区| 996久久国产精品线观看| 欧美性猛交xxxx乱大交| 成人黄色大片网站| 成年人网站在线| 国产精品入口麻豆九色| 久久久久se| 丰满少妇在线观看bd| 久久99久久99小草精品免视看| 18一19gay欧美视频网站| 91成人福利视频| 忘忧草精品久久久久久久高清| 亚洲人成绝费网站色www| 性欧美18—19sex性高清| 国产精品视频一区视频二区 | 午夜视频在线瓜伦| 日韩脚交footjobhd| 亚洲国产精品久久人人爱| 在线免费一区| 色影视在线观看| 中文字幕不卡三区| 日韩在线第一区| 欧美日韩影视| 91丨porny丨国产| 国偷自产av一区二区三区小尤奈| 性少妇videosexfreexxx片| 久久99热99| 92国产精品久久久久首页 | 亚洲欧洲高清| 欧美午夜视频一区二区| 男人用嘴添女人下身免费视频| 欧美78videosex性欧美| 亚洲综合一区二区精品导航| 大地资源网在线观看免费官网| 嫩草在线视频| 亚洲欧美激情视频在线观看一区二区三区 | 久久99精品久久久久久园产越南| 亚洲美女又黄又爽在线观看| 北岛玲一区二区| 你懂的一区二区三区| 亚洲视屏在线播放| 青青青视频在线免费观看| 久久国产电影| 欧美精品制服第一页| 青青草激情视频| 亚洲福利一区| 日本一区二区在线播放| 欧美国产一级片| 老司机精品视频一区二区三区| 成人国产精品一区二区| 国产黄色片网站| av亚洲精华国产精华精华| 欧美国产一二三区| 日本在线看片免费人成视1000| 亚洲三级久久久| www.日本少妇| 3d欧美精品动漫xxxx无尽| 欧美日韩欧美一区二区| 天天色天天干天天色| 久久午夜影院| 中文字幕av一区二区| 在线观看成人毛片| 久久久精品性| 成人高清视频观看www| 丰满熟妇乱又伦| 国产欧美一区二区精品仙草咪| 潘金莲一级淫片aaaaa免费看| jizz一区二区三区| 在线免费观看一区| 一级黄色免费毛片| 红桃成人av在线播放| 久久亚洲综合国产精品99麻豆精品福利| 久一视频在线观看| 日韩国产高清在线| 国产69精品久久久久9999apgf| 欧美另类自拍| 一区二区三区精品| 亚洲成人av免费看| 国产精品高潮呻吟久久久久| 最近中文字幕2019免费| 日本午夜精品理论片a级app发布| 日本午夜一区二区| 国内一区在线| 亚洲小说区图片区都市| 91黄色免费观看| 久久性爱视频网站| 999国产精品视频| 日韩免费中文字幕| 亚洲精品久久久久久无码色欲四季 | 国产精品普通话对白| 91免费观看网站| 毛片网站在线观看| 午夜日韩在线电影| 亚洲第一区第二区第三区| 国产91精品对白在线播放| 欧美二区在线播放| 91影院在线播放| 欧美国产禁国产网站cc| 欧美亚洲国产成人| 成人资源在线| 欧美乱大交xxxxx另类电影| 亚洲男人天堂网址| www一区二区| 僵尸世界大战2 在线播放| www.欧美| 久久天天躁狠狠躁夜夜躁| 最近中文字幕在线观看视频| 久久亚洲一区二区三区四区| 国产 日韩 欧美在线| 亚洲精品在线国产| 欧美高跟鞋交xxxxhd| 国产黄a三级三级三级| 亚洲视频一区二区在线| 青青草久久伊人| 色综合蜜月久久综合网| 国产精品成av人在线视午夜片 | 香蕉污视频在线观看| 99久久精品国产一区二区三区| 国产性生活免费视频| 国产一区二区三区精品在线观看| 日韩中文在线中文网在线观看| 欧美日韩 一区二区三区| 欧美激情一区二区三区蜜桃视频| 亚洲乱码国产一区三区| 国内亚洲精品| 国产精品中文字幕在线| 91精彩在线视频| 欧美另类高清zo欧美| 三级影片在线观看| 精彩视频一区二区| 中国 免费 av| 亚洲国产高清在线观看| 欧美激情在线观看视频| 亚洲国产综合一区| 大桥未久av一区二区三区| 欧美丰满少妇人妻精品| 久久婷婷亚洲| 亚洲欧洲国产精品久久| 国产亚洲精aa在线看| 欧美日韩成人在线视频| 姝姝窝人体www聚色窝| 一本久久精品一区二区| 久久久久亚洲av无码a片| 美女视频网站久久| 日本三级中文字幕在线观看| 伊人久久大香线蕉av超碰| 91国产美女视频| 国产毛片在线| 91精品国产综合久久久久久久| 欧美国产精品一二三| 99久久国产综合精品色伊 | 日本不卡一二三| 精品国产欧美成人夜夜嗨| 亚洲第一天堂影院| 91国在线观看| 四虎免费在线视频| 久久色视频免费观看| 奇米影视四色在线| 亚洲小说欧美另类社区| 日韩欧美精品久久| 一区二区三区四区视频免费观看| 欧美中文字幕在线| 老司机午夜在线| 日韩成人av一区| 国产又黄又大又粗的视频| 天天操天天干天天综合网| 九九热免费在线| 9i在线看片成人免费| 国产九九在线视频| 在线播放日韩| 综合久久国产| 精品中文字幕一区二区三区av| 91麻豆桃色免费看| 台湾佬中文娱乐久久久| 欧美成人久久久| 国产露出视频在线观看| 精品少妇一区二区三区免费观看 | 久久久国产亚洲精品| 无码毛片aaa在线| 禁果av一区二区三区| 国产精品高清一区二区三区| 国产亚洲精彩久久| 456亚洲影院| 免费在线中文字幕| 精品国产一区二区三区久久狼黑人| 色综合888| 精品日韩一区二区三区| 一级特黄aaa| 在线精品视频免费播放| 日本在线视频免费观看| 亚洲欧美一区二区三区孕妇| 色一情一交一乱一区二区三区| 粉嫩高潮美女一区二区三区| 国产精品自在自线| 日韩国产欧美在线视频| 国产不卡一区二区视频| 欧美成人嫩草网站| 麻豆中文字幕在线观看| 欧美伦理在线视频| 日本成人看片网址| 亚洲资源网你懂的| 久久精品国产一区二区三区日韩 | 亚洲第一综合| 视频一区中文| 欧美一区国产一区| 免费精品国产| 欧美日韩另类丝袜其他| 日韩av不卡一区| 久久99蜜桃综合影院免费观看| av综合网址| 国产成人精品福利一区二区三区| 久久wwww| 97超级碰碰| 视频一区日韩| αv一区二区三区| 国产精品一区二区三区四区在线观看 | 久久久国产精品网站| 国产精品成人品| 日韩精品专区| 国产精品久久久久999| 亚洲成人看片| 国产精品国产三级国产aⅴ9色| 欧美电影免费观看网站| 日韩免费在线播放| 本网站久久精品| 成人黄色影片在线| 蜜桃精品视频| av成人综合网| 免费观看成人www动漫视频| 精品一区二区国产| 久久不见久久见免费视频7| 欧美日韩国产综合视频在线| 欧美丝袜一区| 自拍偷拍视频在线| 欧美日韩国产在线一区| 青青青在线视频播放| 日韩一级不卡| 欧美成人黑人猛交| 美日韩一区二区三区| 91免费视频污| av亚洲精华国产精华| 无码人妻丰满熟妇啪啪欧美| 国产精品久久久久久亚洲毛片| 亚洲国产美女视频| 天天综合天天做天天综合| 日本黄色中文字幕| 欧美精品在线观看播放| www.超碰在线.com| 亚洲欧美日韩视频一区| 免费黄网站在线播放| 欧美成人免费全部观看天天性色| 2019中文字幕在线电影免费| 日韩av免费在线观看| 国产不卡精品| 开心色怡人综合网站| 欧美a级片视频| 波多野结衣综合网| 男女男精品网站| 特级特黄刘亦菲aaa级| 国产亚洲精品超碰| 国产av 一区二区三区| 欧美日韩免费观看中文| 一级片视频播放| 亚洲精品日韩欧美| 国产乱色在线观看| 欧美一区二区三区免费视| 欧美成人福利| 国内精品视频免费| 亚洲第一偷拍| 日av中文字幕| 国产91精品欧美| 正在播放国产对白害羞| 亚洲777理论| 国产精品毛片久久久久久久av| 亚洲精品成a人在线观看| 国产在线二区| 国产高清视频一区三区| caoporn成人| 伊人久久大香线蕉综合75| 国产精品久久久亚洲一区| 看看黄色一级片| 久久精品在线观看| 亚洲一区二区91| 91麻豆精品国产91久久久资源速度 | 久草视频在线观| 欧美一区二区三区喷汁尤物| 免费黄色在线视频网站| 久久免费成人精品视频| 99精品女人在线观看免费视频| 日本午夜精品一区二区三区| 亚洲精品欧洲| 亚洲av无码成人精品区| 国产精品不卡视频| 最新中文字幕免费| 国产视频亚洲视频| 国产激情视频在线看| 91久久精品一区二区别| 国产精品久久久久久久免费观看 | 国模一区二区三区白浆| 国产午夜精品久久久久久久久| 一本色道亚洲精品aⅴ| 成人黄色免费视频| 久久偷看各类女兵18女厕嘘嘘| 久久女人天堂| 亚洲欧洲久久| 久久www免费人成看片高清| 精品无码人妻一区二区免费蜜桃| 黑人精品xxx一区一二区| 五月婷婷狠狠干| 97在线观看视频| 琪琪久久久久日韩精品| 精品无码国模私拍视频| 成人app下载| www.av视频在线观看| 精品国产污网站| av在线理伦电影| 国产乱子伦精品| 99精品99| 在线免费观看麻豆| 色香色香欲天天天影视综合网| 深夜福利在线观看直播| 欧美性受xxxx黑人猛交| 欧美美女在线| 欧美精品性生活| 自拍视频在线观看一区二区| 国产视频在线观看免费| 欧美区二区三区| 日韩欧美另类中文字幕| 中文字幕无码精品亚洲资源网久久| 成人高清在线视频| 91视频免费网址| 这里只有视频精品| 四虎视频在线精品免费网址| 日韩人妻精品一区二区三区| 国产不卡视频在线播放| 日韩精品久久久久久久酒店| 亚洲男人天堂古典| 成人免费在线观看视频| 91免费版看片| 93久久精品日日躁夜夜躁欧美| 免费的毛片视频| 社区色欧美激情 | 麻豆国产一区| 国产乱淫av片杨贵妃| 久久久综合视频| 国产精品国产三级国产aⅴ| 欧美肥老妇视频| 亚洲精品**不卡在线播he| 日韩av卡一卡二| 亚洲国产精品麻豆| 国产日本在线视频| 97久草视频| 国产日韩亚洲| 蜜桃视频最新网址| 亚洲丁香久久久| 国产伊人久久| 男女猛烈激情xx00免费视频| 欧美极品美女视频| 午夜久久久久久久久久| 日本在线观看天堂男亚洲| 综合久久精品| 北岛玲一区二区| 欧美一区二区三区色| 天堂av中文在线观看| 2025韩国大尺度电影| 成人av网在线| 91无套直看片红桃| 奇米一区二区三区四区久久| 欧美黄色一级视频| 免费成人深夜天涯网站| 亚洲а∨天堂久久精品9966| 日本欧美韩国| 久色视频在线播放|