硬件和Web组件之间的实时通信协议是什么?

我不完全确定如何在标题中提出我的问题。

我想build立一个系统,作为我家的一种信息仪表盘。 它将包含许多硬件和软件组件,最终将形成一个简单,干净的网站,可以实时显示许多模拟传感器,如温度,风速和方向等。

我已经清楚了自己将要为硬件做什么,以及如何显示信息。 我的问题与硬件和Web服务器之间的通信有关。

我希望硬件以相当快的速度发送消息,所以我不认为HTTP POST就足够了。 我也不是非常关心接收100%的信息,但接收尽可能多的肯定是一个加号。 数据将来自硬件,填充某种数据库(可能是Redis)。

到目前为止,我已经研究了一些东西,但是我不确定我是否正朝着正确的方向前进。 我已经find了面向消息的中间件,比如RabbitMQ,但是我不确信我需要开销。 我也研究过Redis Pub / Sub这个看起来更合适的解决scheme,因为我希望Web应用程序绘制出最后5分钟的数据,但即使如此,我也不确定。 我可以将UDP数据包发送到定制的侦听器吗?

我非常确定硬件将是两个阶段(一个uC喂小embedded式linux机器),所以你甚至可以把这个比喻成桌面软件,尽可能快地向web服务器发送消息。

我冒险进入一个我完全不了解的领域,所以任何指导都非常感谢。

像提到的其他海报,你不会有问题与http post。 Node的http实现是为高并发性而构build的。

就我个人而言,我想我会去:

  1. 硬件设备输出 – >
  2. Linux的盒子直接发送到你的中央服务器(node.js) – >
  3. 采取您的更改,并立即通过socket.io(浏览器的实时传输)发布到您的Web客户端。 https://github.com/LearnBoost/Socket.IO/

对于node.js <==>浏览器来说,Socket.io可能是最好的实时传输工具

如果你想要持久化,那么如果你的数据适合那个模型,那么redis也不错(再加上你得到免费的pub / sub)。

没有理由不能使用基于regreg tcp的连接(networking模块),如果你的包。 除非你想要数据不可靠,否则我不会去udp。 那更有损stream媒体导向。

我真的怀疑,你将有足够的消息担心专用的消息队列。 Rabbitmq引入了诸如队列持久性之类的function,并且具有非常高的吞吐量。 可能比你之后的数量还要多。

您可能会看到像zeromq这样的库,其中有节点绑定: https : //github.com/JustinTulloss/zeromq.node 。 它像rabbitmq中的主题/其他types的交换,但没有中央消息队列节点(一个叫做brokerless)。 这样,你可以直接与你的linux /硬件节点通信,但仍然可以得到像接口一样的消息队列 – 你可以在“通道”上发布你的硬件更新,服务器节点监听这样的更新。

http post有什么问题? 如果你使用node.js作为你的web服务器,它应该足够快。 您已经在节点中编写了表示层,因此您不得不使用一个工具,在这种情况下,它是一个完美的select。 保持简单,坚持节点。

要在数据采集器和收集器之间进行通信,您可以考虑采用行业标准的Modbus TCP协议。 (在以前的生活中,我编写了可编程控制器的networking代码。)

我相信大多数微控制器都有可用的库,尽pipe它们可能不是开源的, 但是我怀疑存在一个JS版本的Modbus,所以你需要自己编写服务器端的lib。 我记得Modbus并不是特别复杂,特别是如果你不使用一些更深奥的function。 当然,写这个让我想到我会怎么写这样的东西,看哪, 已经完成了nodejs ! (我喜欢nodejs社区的众多原因之一!)

那么这就是简单的答案…现在,我的黑客帽子牢牢地位于…

你提到你的硬件将喂一个或多个“小型embedded式Linux机器”。

你有没有考虑在每个数据采集器上运行nodejs? 如果nodejs的可执行文件的大小是问题的话,我相信它的大部分开箱即用function可以被移除或移入模块中。

我意识到我所推荐的不是一件小事,将nodejs / V8的大小和复杂性移植到一个新的平台当然是具有挑战性的,但是我强烈地怀疑nodejs的事件驱动devise是一个很好的匹配数据采集​​,离散制造,过程控制和其他制造应用。