【发布时间】:2020-05-01 20:53:36
【问题描述】:
我正在尝试使用 Paho MQTT JS + Mosquitto 代理 1.6.8 实现客户端和管理员之间的通信方法(双向),但我在保留消息和持久会话方面遇到了一些问题。
我想要完成的事情: 我的 Web 客户端订阅了管理员发布的主题(比如说 topicA),管理员订阅了客户端发布的主题(topicB)。当任何用户收到关于该主题的消息时,它会出现在屏幕上,并且他们会继续出现在上一个主题的下方,以便形成一个消息列表。当他们都在线时,他们必须看到正在发送的消息,如果他们离线,他们也必须看到旧消息和新消息。此外,用户必须能够清除消息列表。
到目前为止我所做的尝试: 我的第一次尝试是将已发布消息的保留值设置为 true,以便可以将消息传递给未来的订阅者。但是,我看到只保留最后一条消息。我调查发现我可以在broker和客户端之间建立一个持久会话(通过cleanSession:false),这样如果我将消息的qos设置为大于0(0或1)的值并且客户端订阅了主题,他们会收到所有未送达的消息。这对我不起作用,或者至少是我期望它起作用的方式。我试过删除 Mosquitto Db 并重新启动(没有改变任何东西)。我还尝试为所有客户端使用相同的 id,为所有管理员使用另一个 id,因为我认为代理可能只为特定的 clientID 保存消息,所以如果具有完全不同 ID 的客户端连接,他们不会得到消息。
有没有办法传递所有未传递的消息(因为一个客户端在线而管理员离线,反之亦然)而不仅仅是最后一个(保留)?或者有没有办法保留多个消息(我认为更好,如果我可以通过发送空有效负载来清除保留的消息)?
【问题讨论】:
标签: javascript websocket mqtt mosquitto paho