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

关于mqtt消息传递实现的建议,mqtt,Mqtt,在由于多次失败而退出GCM之后,我正在使用MQTT开发一个消息传递应用程序 我有一个在线的服务器代理,一个客户端连接并订阅它,并接收订阅主题的消息 现在我正在考虑订阅什么以及发送什么消息。我有一个用于GCM实现的服务器(用户id、google密钥);我想我不再需要那个了?我考虑用用户ID订阅代理,如果用户B想向用户a发送消息,那么B将消息发布到a用户ID主题。。。但通过这种实现,任何人都可以“嗅探”订阅随机ID的对话 所以,我有一个工作的MQTT服务器和客户端,我不知道如何正确地将它们用于消息传

在由于多次失败而退出GCM之后,我正在使用MQTT开发一个消息传递应用程序

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

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

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

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


多谢各位

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

  • 用户A(接收者)应该能够看到任何人发送给它的所有消息
  • 用户B(发送者)应该能够向任何人发送消息
假设您使用以下主题结构:
/messages/{targetUserId}
。为了集中精力,我们还假设您可以基于凭证或证书在代理端识别用户。如果不是这样,请告诉我

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

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

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


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

您使用的MQTT代理是什么?嗨,Oleg,谢谢您的回答。我用的是mosquitto,但我不喜欢它。我还尝试了cloudmqtt,我将使用最适合我需要的。当做嗨,奥列格,再次感谢你的回答!(仍在编辑)嗨,奥列格,再次非常感谢你!我想我没有使用证书或凭据。我正在使用facebook登录,但我认为这与mosquitto不兼容。正如我在阅读你的答案后所读到的,mosquitto插件应该用phyton制造吗?我对它不熟悉。另外,要使用auth-plug,我应该在linux中重新编译包,对吗?也从来没有这样做过。我正在运行win服务器、win mosquitto和WCF服务器。我想我可以使用DINAMICALL生成的密码文件(为每个注册的用户添加行)?或者,另一种方法:我可以将蚊子设置为每个主题限制一个订阅者吗?我不认为您可以这样做。也许您可以考虑Apache ActuMeq作为MQTT的首选代理?它有可插入的基于Java的安全扩展,您可以在Windows机器上实现,并使用它将Facebook登录映射到一些内部模式。非常感谢您,Oleg!我来看看怎么做。当做