由于多次故障而离开GCM后,我正在使用MQTT开发一个消息传递应用程序。
我有一个服务器经纪人在线,一个客户端连接和订阅它,并接收订阅主题的消息。
现在我正在考虑订阅什么以及要发送什么消息。我有一个用于GCM实现的服务器(用户ID,谷歌密钥);我想我不再那样了?我考虑过使用用户ID订阅代理,如果用户B想要向用户A发送消息,那么B会向A用户的ID主题发布消息......但是通过这种实现,任何人都可以“嗅探”订阅随机ID的会话。
所以,我有一个有效的MQTT服务器和客户端,我不知道如何正确地将它们用于消息传递应用......
我可以考虑一下,但我怀疑这是一个已知解决方案的众所周知的问题......
非常感谢你!答案 0 :(得分:1)
我认为解决方案的关键是选择合适的寻址方案和ACL配置。我将首先尝试总结要求:
假设您使用以下主题结构:/messages/{targetUserId}
。我们还假设为了集中注意力,您可以根据凭据或证书识别代理端的用户。如果不是这样,请告诉我。
您可以在mosquitto中创建ACL规则,以允许具有targetUserId的用户从/messages/{targetUserId}
主题中读取。有关规则定义格式的详细信息,请参阅mosquitto.conf documentation。第一个要求将得到满足。
您需要另一个ACL规则,以允许每个人使用/messages/#
地址写入主题。这将满足第二个要求。
因此,用户可以向任何人发送消息,但不会被允许订阅其他人的消息。
但是,除非您有一组预定义的规则,否则为所有用户静态创建所有可能的规则可能不切实际。相反,请实施您自己的身份验证插件,并通过mosquitto.conf
设置在auth_plugin
中对其进行配置。或者使用灵活的mosquitto-auth-plug。 This blog post提供了有关如何配置和使用它的基本详细信息。