Fubo Docs
  • 概要
    • MQTT: IoTメッセージングの標準
    • MQTT 仕様
    • 初心者ガイド
  • チュートリアル
    • Node.js MQTT クライアントガイド
    • MQTTブローカーに接続する
    • MQTTメッセージの公開
    • MQTTメッセージの購読
    • 受信メッセージ
  • 高度なトピック
    • セッションとQoS
    • MQTT セキュリティメカニズム
    • MQTT 保持メッセージ
Powered by GitBook
On this page
  • 購読 API
  • イベント
  • タイミング
  • 購読例
  • シングルトピックに登録する
  • 複数のトピックを購読する
  • トピックオブジェクトを使用して複数のトピックに登録する
  • rh オプションを使用して購読する
  • プロパティを使用して購読する
  1. チュートリアル

MQTTメッセージの購読

トピックに関するメッセージを受信するには、そのトピックまたは複数のトピックを購読する必要があります。

トピックを購読するには、Paho MQTTクライアントクラスのsubscribeメソッドを使用します。

上の図に示されているように、サブスクライブメッセージはSubAckメッセージによって確認されます。

購読するには提供する必要があります

  1. QOS -0,1,2

  2. トピックまたはトピック

あなたは一つの関数呼び出しで複数のトピックを購読できることに注意してください。

MQTT v5を使用する際には、サブスクライブプロパティも送信できます。

再び、publishメッセージと同様に、SubAckメッセージを受け取るためにはpacketreceiveイベントをリッスンする必要があります。

購読 API

まずクライアントオブジェクトを作成し、次に以下のようにsubscribeメソッドを呼び出します:

client.subscribe(topic/topic array/topic object, [options], [callback])

単一のトピックとトピックの配列、そしてトピックオブジェクトを渡すことができます。

選択肢は次のとおりです

  1. QOS -0,1,2

  2. トピックまたはトピックス

  3. ローカルなし - MQTT v5

  4. 公開時のまま保持 - MQTT v5

  5. 取り扱い維持 - MQTT v5

  6. プロパティ - MQTT v5

コールバック関数は以下の形式をしています:

関数 (err, granted)

どこで:

  • サブスクリプションエラー、またはクライアントが切断する際に発生するエラー

  • 付与されるのは{topic, qos}の配列です

  • トピックは購読されたトピックです

  • qosはそれに与えられたQoSレベルです

イベント

サブアックをキャプチャするには、以下に示すようにpacketreceiveイベントをリッスンする必要があります

client.on("packetreceive",function(packet){	
	console.log("receive packet  "+ JSON.stringify(packet));
	
	})

これが私たちが見るものです:

connected  true
subscribing to topics
receive packet  {"cmd":"suback","retain":false,"qos":0,"dup":false,"length":3,"topic":null,"payload":null,"granted":[1],"messageId":26988}

タイミング

ノード.jsは非同期関数を使用しているため、タイミングに注意する必要があります。

例えばそのプロセス

  1. 接続する

  2. 登録する

接続が完了する前に購読が行われるため、機能しない可能性があります。他の言語では、次のように接続が完了するのを単に待ちます:

  1. 接続する

  2. 接続を待つ

  3. 公開

しかし、Node.jsではこれを行うことはできません。

接続が確立されるかテストしてから購読する場合:

if (client.connected==true){
client.subscribe("testtopic",options)
}

その場合、ほぼ確実に機能していないでしょう。接続が確立されていない可能性が高いです。

したがって、ほとんど常にon_connectコールバックでサブスクライブします。

この方法なら、購読する前に接続されていることがわかり、接続が切れた場合は購読が更新されます。

client.on("connect",function(){	
    console.log("connected  "+ client.connected);
    let topic="test_topic";
    let options={qos:1};
    client.subscribe(topic,options);
	
	})

購読例

シングルトピックに登録する

var topic="testtopic";
var message="test message";
console.log("subscribing to topics");
client.subscribe(topic,{qos:1}); //single topic

複数のトピックを購読する

この場合、彼らはすべて同じQOSを使用します。

var topics=["testtopic","testtopic2"];
var message="test message";
console.log("subscribing to topics");
client.subscribe(topics,{qos:1}); //single topic

トピックオブジェクトを使用して複数のトピックに登録する

この場合、使用されるQOSレベルはトピックオブジェクトにある0です。オプションで設定されたQOSは無視されます。

var topics={"testtopic":{qos:0},"testtopic2":{qos:0}};
var message="test message";
console.log("subscribing to topics");
client.subscribe(topics,{qos:1}); //single topic

rh オプションを使用して購読する

このオプションは、例のように2に設定すると、ブローカーに対してサブスクライブ時に保持メッセージを送信しないように指示します。これが機能するためには、接続時にプロトコルバージョンを5に設定する必要があります。

var topic="testtopic";
console.log("subscribing to topics");
client.subscribe(topic,{qos:0,rh:2}); //single topic

プロパティを使用して購読する

この例では、受信メッセージのフィルタリングに使用できるサブスクリプション識別子を設定します。

ブローカーがクライアントに送信するメッセージには、サブスクリプションのトピックに一致するサブスクリプション識別子が含まれています。

この例では、購読するトピックはtesttopicで、サブスクリプション識別子は1に設定されています。

したがって、サブスクリプション識別子が1に設定されているクライアントには、testopicに公開されたメッセージが送信されます

var topic="testtopic";
console.log("subscribing to topics");
let subOptions={qos:0,properties:{subscriptionIdentifier:1}}
client.subscribe(topic,subOptions); //single topic

これがクライアントが受け取るものです。ペイロードの最後にサブスクリプション識別子があることに注意してください。

// message is test message
// topic is testtopic
packet ={"cmd":"publish","retain":true,"qos":0,"dup":false,"length":26,"topic":"testtopic","payload":{"type":"Buffer","data":[116,101,115,116,32,109,101,115,115,97,103,101]},"properties":{"subscriptionIdentifier":1}}

PreviousMQTTメッセージの公開Next受信メッセージ

Last updated 12 months ago