在MQTT中实现XMPP存在功能

时间:2014-05-03 03:51:57

标签: mqtt

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

1 个答案:

答案 0 :(得分:10)

某些代理实现可能会为连接/断开事件提供合适的挂钩来启用此功能,但对于代理而言,这不是协议的要求。

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

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

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

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

  • 关于主题client/+的{​​{1}}消息表示A当前已连接
  • 关于主题1的{​​{1}}消息表示A当前已断开连接

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

相关问题