【问题标题】:Swift MQTT libmosquitto cleanSession set to false yet unable to set up a persistent subscriptionSwift MQTT libmosquitto cleanSession 设置为 false 但无法设置持久订阅
【发布时间】:2016-08-19 02:37:58
【问题描述】:
client = MosquittoClient(clientId: "client1")
client?.delegate = self
client?.port = 1883
client?.host = "someIPAddress"
client!.cleanSession = false
client?.connect()

libmosquitto 是一个客观的 c 库,它被桥接到一个 swift 项目中。因此,在将 cleanSession 设置为 false 后,我仍然无法设置持久订阅或在离线时接收消息。

【问题讨论】:

  • 你遇到了什么错误?
  • 没有错误。但是,当我在客户端离线时向客户端推送消息时,一旦重新连接,客户端就会收到消息。但事实并非如此。 @pableiros
  • 您使用的是哪个代理?
  • IBM WebSphere @hardillb

标签: swift mqtt libmosquitto


【解决方案1】:

设置 cleanSession = false 将无法完成您的工作。如果您想在重新连接后收到一条消息,则需要 QOS..

默认情况下,消息和订阅的 qos 为 0,这将不能保证消息将被传递到离线客户端。

你需要做两件事:
1. 订阅主题时,使用 QOS 1 或 2 订阅它。
2. 当您发布要传递给离线客户端的消息时,使用 qos 1 或 2 发送。

Nd 也使用相同的客户端 ID 进行连接。如果您希望在发布消息时使用 retain=true 的新客户端也接收消息

【讨论】:

  • 我已经订阅了一个具有 QOS 1 的主题,并且还向具有 QOS 1 的离线客户端发布了消息。但是,客户端在离线时仍然收不到任何消息。
  • 连接代理时使用相同的客户端 ID?
  • 是的。绝对一样
猜你喜欢
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多