3

成功publishしたか失敗したかを識別する方法。topicトピックへの公開に関する確認を取得する方法はありますか。

publishクライアント (パブリッシャー/サブスクライバー)間で接続が失われた場合の対処方法。

Pay_load を受信した後、サブスクライバーが発行側の特定のトピックに ack を送信することを望まない。

ここに私のルビーコードがあります:

クライアント(@client)を作成し、両側で構成したとします。

公開

def publish_it
  @client.publish('test/hai', 'message')
  # Ack the publish
end

申し込む

@client.subscribe('test/#')

@client.get do |topic,message|
  puts "#{topic}: #{message}"
end
4

1 に答える 1

9

MQTT にはエンド ツー エンド (パブリッシャーからサブスクライバー) の配信通知はありません。これは、pub/sub プロトコルとして、パブリッシャーが特定のトピックに何人のサブスクライバーが存在するかを知る方法がないためです。0 から n までの値が存在する可能性があります。

仕様に組み込まれた QOS レベルにより、メッセージがパブリッシャーからブローカーに (そしてブローカーからサブスクライバーに) 確実に配信されます。メッセージが確実に配信されるようにする場合は、QOS レベル 1 または 2 を使用します。

QOS 1 は、メッセージが少なくとも 1 回配信されることを保証します (ネットワークに問題がある場合は、複数回配信される可能性があります)。

QOS 2 は、メッセージが 1 回だけ配信されるようにします。

ほとんどの MQTT クライアント ライブラリにはdeliveryComplete、パブリッシュのすべての QOS ハンドシェイクが完了したときに呼び出されるコールバックもあります。ブローカー。残念ながら、これが Ruby クライアントに実装されているのを見ることができません。

于 2016-06-17T08:36:23.610 に答える