【问题标题】:Implementing XMPP presence feature in MQTT在 MQTT 中实现 XMPP 存在特性
【发布时间】:2014-05-04 07:12:45
【问题描述】:

我目前正在开发一个项目,一个使用 MQTT 的聊天应用程序,其中有 3 个客户端 A、B、C。当每个客户端加入时,他们最初为 A 订阅 2 个主题,其 A-B、A-C,而 B 订阅 A-B , B-C 和 c 订阅 t0 A-C 和 B-C。这些是聊天消息发送和接收的主题。现在我想添加存在支持,以通知用户是离线还是在线。 MQTT 代理是否支持任何内置机制来实现此目标。

【问题讨论】:

    标签: mqtt


    【解决方案1】:

    一些代理实现可能会为连接/断开连接事件提供合适的钩子以启用此功能,但这不是代理必须这样做的协议。

    可以使用协议的功能创建一个存在感知系统

    您可以在这里阅读更多内容:https://github.com/mqtt/mqtt.github.io/wiki/presence

    总之,当客户端连接时,它应该定义一个0 的Last Will 消息以发布到主题client/[client-id] 并设置保留标志。然后它应该向主题client/[client-id] 发布一个retained 消息,其值为1

    这意味着任何人都可以订阅client/+ 并获取所有已知客户端的当前状态:

    • 1 在主题 client/A 上的消息表示 A 当前已连接
    • 0 在主题 client/A 上的消息表示 A 当前已断开连接

    顺便说一句,您应该仔细考虑您希望客户订阅哪些主题。正如您所描述的,您让每个客户都明确订阅每个其他客户的主题。这不会很好地扩展 - 考虑如何使用通配符来管理它。

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 2013-06-09
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2015-12-03
      • 2011-07-26
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多