2

我不完全确定如何在标题中表达我的问题,如果令人困惑,请道歉。

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

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

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

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

我很确定硬件将分为两个阶段(一个 uC 为小型嵌入式 linux 机器提供服务),因此您甚至可以将其比作桌面软件尽快将消息发送到 Web 服务器。

我正在冒险进入一个我完全不了解的领域,因此非常感谢任何指导。

4

3 回答 3

1

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

我确信大多数微控制器都有可用的库,尽管它们可能不是开源的,但我怀疑是否存在 JS 版本的 Modbus,因此您需要自己编写服务器端库。我记得 Modbus 并不是特别复杂,特别是如果您不使用它的一些更深奥的功能。当然,写这篇文章让我开始思考如何写这样的东西,你瞧,它已经为 nodejs 完成了!(我喜欢 nodejs 社区的众多原因之一!)

所以这就是简单的答案......现在,我的黑客帽已经牢牢地到位......

您提到您的硬件将提供一个或多个“小型嵌入式 Linux 机器”。

您是否考虑过在每个数据收集器上运行 nodejs?如果 nodejs 的可执行文件的大小是问题,我敢肯定它的大部分开箱即用的功能可以被删除或移动到模块中。

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

于 2011-06-01T18:29:16.403 回答
0

http post有什么问题?如果您使用 node.js 作为您的 Web 服务器,它应该足够快。您已经在 node 中对表示层进行了编码,因此您必须使用的工具更少,在这种情况下,它非常适合。保持简单并坚持使用节点。

于 2011-06-01T04:03:17.237 回答
0

就像提到的其他海报一样,您不会遇到 http 帖子的问题。Node 的 http 实现是为高并发而构建的。

就个人而言,我想我会选择:

  1. 硬件设备输出 ->
  2. Linux 框直接向您的中央服务器 (node.js) 发送一个 http 帖子 ->
  3. 接受您的更改并立即通过 socket.io(浏览器的实时传输)将它们发布到您的 Web 客户端。https://github.com/LearnBoost/Socket.IO/

Socket.io 可能是 node.js <==> 浏览器开箱即用的最佳实时传输

如果您想要持久性,如果您的数据适合该模型,redis 还不错(而且您可以获得免费的 pub/sub),它可能确实如此。

如果那是你的包,你也没有理由不能使用基于 reglar tcp 的连接(网络模块)。除非您希望数据不可靠,否则我不会使用 udp。那是面向有损流媒体的。

我真的怀疑您是否会有足够的消息来担心专用的消息队列。Rabbitmq 引入了诸如队列持久性之类的特性,并为难以置信的高吞吐量而构建。可能比你所追求的要多几个数量级。

您可能会查看一个类似 zeromq 的库,其中有节点绑定:https ://github.com/JustinTulloss/zeromq.node 。它就像 rabbitmq 中的主题/其他类型的交换,但没有中央消息队列节点(称为无代理)。这样您就可以直接与您的 linux/硬件节点对话,但仍然可以获得类似界面的消息队列——您在“通道”上发布硬件更新,并且您的服务器节点会监听此类更新。

于 2011-06-01T05:55:39.090 回答