【发布时间】:2019-03-04 18:42:17
【问题描述】:
我每秒钟都需要解决上游大量数据。 通过无线 (WiFi) 或以太网每秒 200kBytes。
我选择了 MQTT,因为 它对于与需要少量代码和/或网络带宽非常宝贵的远程位置的连接非常有用。
MQTT 在网络带宽使用上比 Socket.io 更好? 或者,MQTT 是实时上传/发布的良好解决方案。 MQTT可以和socket.io(WebSocket)一样用于图表系统吗?
【问题讨论】:
我每秒钟都需要解决上游大量数据。 通过无线 (WiFi) 或以太网每秒 200kBytes。
我选择了 MQTT,因为 它对于与需要少量代码和/或网络带宽非常宝贵的远程位置的连接非常有用。
MQTT 在网络带宽使用上比 Socket.io 更好? 或者,MQTT 是实时上传/发布的良好解决方案。 MQTT可以和socket.io(WebSocket)一样用于图表系统吗?
【问题讨论】:
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 将其报告为顶级功能。平衡将取决于两端都有什么系统以及所涉及的图表类型。
【讨论】: