硬件和Web组件之间的哪种实时通信协议?

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

要回复问题请先登录注册