在MQTT中实现XMPP存在功能

Ros*_*han 4 mqtt

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

kno*_*ary 10

某些代理实现可以为连接/断开事件提供合适的挂钩以实现此目的,但是对于代理来说这不是协议的要求.

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

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

总之,当客户端连接时,它应该定义0要发布到client/[client-id]具有保留标志集的主题的Last Will消息.然后,它应该将保留的消息发布到client/[client-id]值为的主题1.

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

  • 1关于主题的消息client/A意味着A当前已连接
  • 0关于主题的消息client/A意味着A当前已断开连接

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