关于 mqtt 消息传递实现的建议
advice on mqtt messaging implementation
我正在使用 MQTT 开发一个消息传递应用程序,在由于多次失败而离开 GCM 之后。
我有一个服务器代理在线,一个客户端连接并订阅它,并接收订阅主题的消息。
现在我正在考虑要订阅什么以及要发送什么消息。我有一个用于 GCM 实现的服务器(用户 ID,google 键);我觉得我不需要那个了?我考虑过使用用户 ID 订阅代理,如果用户 B 想向用户 A 发送消息,那么 B 会向 A 用户的 ID 主题发布一条消息......但是通过这种实现,任何人都可以 "sniff" 订阅随机 ID 的对话。
所以,我有一个可用的 MQTT 服务器和客户端,但我不知道如何将它们正确地用于消息传递应用程序...
我可以考虑一下,但我怀疑这将是一个已知解决方案的众所周知的问题...
非常感谢!
我认为解决的关键是选择合适的寻址方案和配置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 提供了有关如何配置和使用它的基本详细信息。
我正在使用 MQTT 开发一个消息传递应用程序,在由于多次失败而离开 GCM 之后。
我有一个服务器代理在线,一个客户端连接并订阅它,并接收订阅主题的消息。
现在我正在考虑要订阅什么以及要发送什么消息。我有一个用于 GCM 实现的服务器(用户 ID,google 键);我觉得我不需要那个了?我考虑过使用用户 ID 订阅代理,如果用户 B 想向用户 A 发送消息,那么 B 会向 A 用户的 ID 主题发布一条消息......但是通过这种实现,任何人都可以 "sniff" 订阅随机 ID 的对话。
所以,我有一个可用的 MQTT 服务器和客户端,但我不知道如何将它们正确地用于消息传递应用程序...
我可以考虑一下,但我怀疑这将是一个已知解决方案的众所周知的问题...
非常感谢!
我认为解决的关键是选择合适的寻址方案和配置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 提供了有关如何配置和使用它的基本详细信息。