mqtt 可變長頭部

  • windows 客戶端 mqttfx
  • 測試代碼使用java
  • mqtt lib庫使用的是 Paho
  • 淺析測試遺囑和clean flags

Clean session flag

  • 位置 bit 1(八個無符號,index 1的位置)
  • 值:0 或者1
0: 表示訂閱的客戶端短線了,要爲它保持推送的消息,若它重新連接時, 需要將這些消息推送(若客戶端長時間不連接,需要設置一個過期時間)
1: 斷線服務器立即清除相關信息,重新連接上來,需要再次訂閱

Java paho代碼

MemoryPersistence persistence = new MemoryPersistence();

try {
    sampleClient = new MqttClient("tcp://192.168.0.208:1883", "jiazqClientId",
            persistence);
    MqttConnectOptions connOpts = new MqttConnectOptions();
    connOpts.setCleanSession(false);
    sampleClient.connect(connOpts);
    System.out.println("--------連接成功-------");

} catch (MqttException e) {
}

注意事項:

  • 主動調用 disconnect後,Mqttt會及時清除客戶端信息,不會緩存其相應消息
  • 用於接收消息

will flag

定義客戶端沒有主動發送disconnect 出現網絡異常導致連接中斷的情況下,服務器需要做成的措施;客戶端需要連接時候預先設定好,自己帶異常斷開情況下,所留下最後的遺囑(Last will); 就是預先定義好的主題和對應消息. 這些副加到可變頭部,在發成異常情況下,有服務器代發此消息 。

java paho 代碼

MemoryPersistence persistence = new MemoryPersistence();

try {
    sampleClient = new MqttClient("tcp://192.168.0.208:1883", "jiazqClientId3",
            persistence);
    MqttConnectOptions connOpts = new MqttConnectOptions();
    connOpts.setCleanSession(false);
    connOpts.setWill("jiazq/test123", "我掉線了".getBytes(), 1, false);
    //connOpts.setConnectionTimeout(60);
    sampleClient.connect(connOpts);
    System.out.println("--------連接成功-------");

} catch (MqttException e) {
}

will Qos

前提 will flag設置爲1 纔有效. 代表消息質量,含義同Qos

will retain

前提will flag 設置爲1 纔有效,代表是否持久化消息,含義同retain

注意

  • mqtt clientId是命名必須唯一的.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章