首页 文章

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

提问于
浏览
0

我正在使用MQTT开发一个消息传递应用程序,因为多次失败而退出GCM .

我有一个服务器代理在线,一个客户端连接和订阅它,并接收订阅主题的消息 .

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

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

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

非常感谢你!

1 回答

  • 1

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

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

    • 用户B(发件人)应该能够向任何人发送消息

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

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

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

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

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

相关问题