关于mqtt消息传递实现的建议

时间:2015-07-20 20:29:11

标签: mqtt

由于多次故障而离开GCM后,我正在使用MQTT开发一个消息传递应用程序。

我有一个服务器经纪人在线,一个客户端连接和订阅它,并接收订阅主题的消息。

现在我正在考虑订阅什么以及要发送什么消息。我有一个用于GCM实现的服务器(用户ID,谷歌密钥);我想我不再那样了?我考虑过使用用户ID订阅代理,如果用户B想要向用户A发送消息,那么B会向A用户的ID主题发布消息......但是通过这种实现,任何人都可以“嗅探”订阅随机ID的会话。

所以,我有一个有效的MQTT服务器和客户端,我不知道如何正确地将它们用于消息传递应用......

我可以考虑一下,但我怀疑这是一个已知解决方案的众所周知的问题......

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我认为解决方案的关键是选择合适的寻址方案和ACL配置。我将首先尝试总结要求:

  • 用户A(接收方)应该能够看到来自任何人的所有消息
  • 用户B(发件人)应该能够向任何人发送消息

假设您使用以下主题结构:/messages/{targetUserId}。我们还假设为了集中注意力,您可以根据凭据或证书识别代理端的用户。如果不是这样,请告诉我。

您可以在mosquitto中创建ACL规则,以允许具有targetUserId的用户从/messages/{targetUserId}主题中读取。有关规则定义格式的详细信息,请参阅mosquitto.conf documentation。第一个要求将得到满足。

您需要另一个ACL规则,以允许每个人使用/messages/#地址写入主题。这将满足第二个要求。

因此,用户可以向任何人发送消息,但不会被允许订阅其他人的消息。

但是,除非您有一组预定义的规则,否则为所有用户静态创建所有可能的规则可能不切实际。相反,请实施您自己的身份验证插件,并通过mosquitto.conf设置在auth_plugin中对其进行配置。或者使用灵活的mosquitto-auth-plugThis blog post提供了有关如何配置和使用它的基本详细信息。