【发布时间】: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
我目前正在开发一个项目,一个使用 MQTT 的聊天应用程序,其中有 3 个客户端 A、B、C。当每个客户端加入时,他们最初为 A 订阅 2 个主题,其 A-B、A-C,而 B 订阅 A-B , B-C 和 c 订阅 t0 A-C 和 B-C。这些是聊天消息发送和接收的主题。现在我想添加存在支持,以通知用户是离线还是在线。 MQTT 代理是否支持任何内置机制来实现此目标。
【问题讨论】:
标签: mqtt
一些代理实现可能会为连接/断开连接事件提供合适的钩子以启用此功能,但这不是代理必须这样做的协议。
可以使用协议的功能创建一个存在感知系统
您可以在这里阅读更多内容: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 当前已断开连接顺便说一句,您应该仔细考虑您希望客户订阅哪些主题。正如您所描述的,您让每个客户都明确订阅每个其他客户的主题。这不会很好地扩展 - 考虑如何使用通配符来管理它。
【讨论】: