我不完全确定如何在标题中说出我的问题,如果它令人困惑,请道歉。
我想建立一个系统,作为我家的一种信息仪表板。它将由许多硬件和软件组成,最终将形成一个简单,干净的网站,可以实时显示许多模拟传感器,如温度,风速和风向等。
我已经知道我要为硬件做什么,以及显示信息;我的问题与硬件和网络服务器之间的通信有关。
我希望硬件以相当快的速度触发消息,所以我不认为HTTP POST就足够了。我也不是非常关心收到100%的邮件,但收到尽可能多的邮件肯定是一个加分。数据将来自硬件,填充某种数据库(可能是Redis)。
到目前为止,我已经研究过几件事,但我不确定自己是否朝着正确的方向前进。我已经研究了面向消息的中间件,例如RabbitMQ,但我不相信我需要开销。我也研究了Redis Pub/Sub这似乎是一个更合适的解决方案,因为我希望网络应用程序能够说出最后5分钟的数据,但即便如此我也不确定。我可以将UDP数据包发送到定制的侦听器吗?
我非常肯定硬件将分为两个阶段(uC为一台小型嵌入式Linux机器供电),所以你甚至可以将其比作桌面软件,尽可能快地向网络服务器发送消息。
我冒险进入一个我完全不了解的领域,因此非常感谢任何指导。
答案 0 :(得分:1)
要在数据采集器和收集器之间进行通信,您可以考虑采用行业标准Modbus TCP协议。 (在以前的生活中,我为可编程控制器编写了网络代码。)
我确信大多数微控制器都有可用的库,虽然它们可能不是开源的,但是我怀疑存在一个JS版本的Modbus,所以你需要自己编写服务器端的lib。我记得Modbus并不是特别复杂,特别是如果你不使用它的一些更深奥的功能。当然,写这个让我想到我是怎么写这样的东西而且看,它是{{ {3}}! (我喜欢nodejs社区的众多原因之一!)
这就是简单的答案......现在,我的黑客帽子已牢固地存在......
你提到你的硬件将提供一个或多个“小型嵌入式Linux机器”。
您是否考虑过在每个数据收集器上运行nodejs?如果nodejs的可执行文件的大小是问题,我确信它的开箱即用功能的很大一部分可以删除或移动到模块中。
我意识到我所推荐的并不是一件小事 - 将nodejs / V8的大小和复杂性移植到一个新平台当然具有挑战性 - 但我强烈怀疑nodejs的事件驱动设计将是一个非常适合数据采集,离散制造,过程控制和其他制造应用。
答案 1 :(得分:0)
http post有什么问题?如果您使用node.js作为您的Web服务器,它应该足够快。您已经在节点中对表示层进行编码,因此您将不得不使用一个较少的工具,在这种情况下,它非常适合。保持简单并坚持使用节点。
答案 2 :(得分:0)
与上面提到的其他海报一样,你不会遇到http post的问题。 Node的http实现是为高并发而构建的。
我个人认为我会选择:
Socket.io可能是node.js< ==>的最佳开箱即用实时传输。浏览器
如果你想要持久化,redis并不坏(加上你得到免费的pub / sub)如果你的数据适合那个模型,它可能就是这样。
没有理由你也不能使用基于reglar tcp的连接(网络模块),如果这是你的包。除非您希望数据不可靠,否则我不会去udp。这是更有损流媒体导向。
我真的怀疑你是否会有足够的消息来担心专用的消息队列。 Rabbitmq引入了诸如队列持久性之类的功能,并且具有令人难以置信的高吞吐量。可能比您追求的数量多出几个数量级。
您可能会看到像zeromq这样的库,其中有节点绑定:https://github.com/JustinTulloss/zeromq.node。它像rabbitmq中的主题/其他类型的交换,但没有中央消息队列节点(一个称为无代理)。这样你就可以直接与你的linux / hardware节点对话,但仍然得到像界面一样的消息队列 - 你在'通道'上发布你的硬件更新,你的服务器节点就会监听这些更新。