MQTT vs Socket.IO 关于网络带宽使用

Posted

技术标签:

【中文标题】MQTT vs Socket.IO 关于网络带宽使用【英文标题】:MQTT vs Socket.IO on Network bandwidth usage 【发布时间】:2019-03-04 18:42:17 【问题描述】:

我每秒钟都需要解决上游大量数据。 通过无线 (WiFi) 或以太网每秒 200kBytes。

我选择了 MQTT,因为 它对于与需要少量代码和/或网络带宽非常宝贵的远程位置的连接非常有用。

MQTT 在网络带宽使用上比 Socket.io 更好? 或者,MQTT 是实时上传/发布的良好解决方案。 MQTT可以和socket.io(WebSocket)一样用于图表系统吗?

【问题讨论】:

【参考方案1】:

Socket.io does several things at once。这个答案的重点是你关于底层协议 WebSockets 的注释,当然你可以使用没有 Socket.io 的那些。

WebSockets 与 MQTT 是一个从苹果到篮子的比较,因为两者都可以在没有另一个或一起工作的情况下工作。 MQTT 可以作为 HTTP 的替代方案单独工作。 WebSockets 是 HTTP 之上的附加协议,可以保持长时间运行的连接打开,从而可以长时间发送消息流,而无需为每个连接建立新的连接要求。该连接可以携带 MQTT 或非 MQTT 数据(如 JSON 对象),并具有提供消息按顺序到达的可靠双向链接的好处。

MQTT 的开销也更少,原因不同:它采用 发布-订阅模型(Pub-Sub 模型) 设计,并针对通过狭窄、缓慢或不可靠的连接传递数据进行了优化。尽管它省略了许多伴随 HTTP 消息的标头,以支持a few densely-coded bytes,real difference is in speed of delivery。受限嵌入式设备的首选,尽管它们通常发送小消息并试图节省数据/处理/功率。

所以它们有不同的优势,甚至可以结合起来。 MQTT-via-WebSockets 是使用 MQTT inside a webapp 的常用方法,尽管普通 MQTT 是低端设备的标准(无论如何可能很难发送这么多数据)。我建议 MQTT 用于从设备发送到服务器,或者 WebSockets-MQTT 用于在浏览器中快速接收设备数据或确保高速发送的消息的顺序。一个重要的例外是流式传输 - 只有通过 MQTT 的孤立报告,而 Socket.io 将其报告为***功能。平衡将取决于两端都有什么系统以及所涉及的图表类型。

【讨论】:

没问题@DarrellSheley!它是否回答了您的问题,还是您需要进一步的解释? 感谢您的帮助。那么,我无法比较 MQTT 与 Socket 在网络带宽使用方面的差异? 如果您准确定义要发送的内容,则可以比较它们 - 例如“X 大小为 Y 的消息通过加密 MQTT 与身份验证与加密 Socket.io”。我没有关于结果的现成信息,这个答案主要解释了技术,这样你就可以确定你的要求并提出一个测试用例。 如果我想通过慢速互联网网络(大约 100kbps)发送最大 5 kb 的消息并且同时触发大约 500-100 条消息怎么办。为此实施渠道的最佳方式是什么。 socket.io + mqtt 在这种情况下会有所帮助吗?如果是,是否有关于此类应用程序实施的博客或某种在线内容? "[WebSockets] 可以同时承载 HTTP 和 MQTT" - 这是误导性的。 WebSockets 运行在 HTTP 之上。在 websocket 上运行 HTTP 会很奇怪。可能,当然,但我真的很难想象有人会这样做的原因。在 websocket 上运行 MQTT 确实有它的位置。

以上是关于MQTT vs Socket.IO 关于网络带宽使用的主要内容,如果未能解决你的问题,请参考以下文章

关于 MQTT,你需要了解这些

mqtt与socket的区别

5G对MQTT有啥影响?

MQTT 消息中间件特性

MQTT协议学习及实践(Linux服务端,Android客户端的例子)

MQTT 协议学习:001-有关概念入门