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 关于网络带宽使用的主要内容,如果未能解决你的问题,请参考以下文章