MQTT 作为集中式通信协议

MQTT as a centralized communication protocol

我想为大量设备实施服务。此服务应该能够 send/receive(小 - 最大 1kB)服务器和客户端之间的消息,以及设备和设备之间的 p2p。

目前我正在考虑使用 MQTT 来实现这一点,因为它似乎是一种轻量级的低流量生成协议。如本文所述 question XMPP 也可能是替代方案,但我不确定这是否能提供我需要的性能。

总结一下我对协议的期望如下:

  1. 小开销
  2. 小负载
  3. 大量客户(从 100.000 开始)
  4. 处理不稳定的网络连接
  5. 可扩展性,例如使用多个代理实例
  6. 客户端之间的P2P连接(可以通过相关服务器解决)
  7. 如果可能的话,Java、Java脚本和 C++
  8. 中的开源实现

MQTT 对我来说是正确的方法还是我应该考虑一些替代方案?另请记住,我需要创建一个高度可扩展的服务。

我认为如果您以正确的方式使用 MQTT,您的所有期望 除了 6. 都可以实现。您应该查看 http://www.eclipse.org/paho/ and http://mosquitto.org/ 以了解 OpenSource 实现。

由于 MQTT 具有发布-订阅架构,其中每条消息都发送到消息代理(服务器)并由其分发,因此 P2P 可能是一个问题。您可以为两个客户端之间的每个连接使用专用主题,但消息仍必须通过消息代理传递。 作为解决方法,您可以通过 MQTT 在客户端之间协商 P2P 连接,然后将协商的通道与其他协议一起使用。

正如 leikes 所说,使用 MQTT,您拥有所需的所有功能,并且使用代理可以实现第 6 点。 MQTT 的一大不足是它本身不支持 request/reply 模式(如 HTTP 或 AMQP),但完全支持 publish/subscribe 模式。 当然,如果您需要 request/reply,您需要在协议本身之上的层中定义正确的主题和有效负载,以在请求和响应之间创建 matching/correlation 逻辑。

保罗.