Java应用程序和本地服务器之间的进程间通信

CME*_*E64 10 java apache inter-process-communicat node.js raspberry-pi

首先欢呼所有程序员[今天=程序员日:)]

其次,我正在开发一个项目,其中规范要求使用服务器作为前端和后端的应用程序.该项目是一个先进的智能家居系统.服务器将通过互联网处理来自客户端的命令(比如说来自房子外面的远程控制)并将它们(通过通信通道)发送到应用程序(计划使用JAVA应用程序),这将处理主要逻辑比如控制硬件(灯......),从麦克风(本地麦克风)读取和访问数据库以充当语音识别系统(离线).

现在我还处于规划阶段,我不确定哪个技术最适合这个项目.我正在考虑使用Node.jsApache作为服务器,使用JAVA应用程序作为后端,并使用任何SQL数据库作为应用程序的SRS.

我希望这个插图清楚地说明了系统的工作原理:

在此输入图像描述

主要问题是:

使Java应用程序与服务器通信的最佳方法是什么(通信通道[必须是双向的])?

你推荐这个工作以外的特定服务器吗?

到目前为止,我的想法是什么:

1- JSP和servlets(使服务器也是应用程序).但我不希望服务器处理离线的东西,我不确定java servlet是否可以访问硬件接口.我还希望服务器与做出关键决策分开(出于安全原因不同的层,因为它不会像本地[离线]系统那样频繁使用).

2-沟通渠道:

A-一个共享文件,但这是一个坏主意,因为我不希望应用程序检查文件内容是否发生了变化(接收到命令)或不时(过度操作).

B-通过端口进行进程间通信(套接字通信)似乎是最好的解决方案,但我不知道在运营成本和通信错误方面会如何转变.

使用的操作系统: Linux Raspbian

编辑:

我确信ZMQ + Apache对于这项任务已经足够好了,但它与WebServices(如SOAP)相比如何呢?WebServices在标准实现和安全性方面是否会成为更好的解决方案?

欢迎所有相关建议,TQ

mok*_*oka 4

ZeroMQ 非常适合内部通信或任何其他类似的通信解决方案。

对于您的具体情况,我认为ZeroMQ将是最合适的。
理由:

  • 您的离线服务器必须与 Web 解决方案无关。
  • 通信可以是可靠的和双向的,可能是另一种模式,如(pub>sub、req<>res 等)。
  • 重新启动任何一侧都不需要重新启动另一侧的套接字(连接),因为消息已排队。
  • 不仅可以在相同的硬件上进行扩展,还可以扩展到局域网甚至通过互联网。
  • 庞大的支持社区。它可能看起来有点难以理解,但实际上它非常简单,只需查看示例,一旦理解了概念 - 使用起来非常简单和整洁。
  • ZeroMQ 拥有许多适用于大多数流行语言的驱动程序,包括JavaNode.js

注意事项:

  • 您需要考虑将要发送的数据包和数据。因此,一些流行的数据协议(例如 XML 或 JSON)是很好的思考方式。
  • 不同服务的责任 - 确保它们不会过度依赖彼此。或者,如果主要离线服务器 - 是系统的核心,请确保它不依赖于面向 Web 的服务,以便可以删除/替换/改进 Web 面等。

还有几点需要考虑
为什么选择 Java,模块化方法又如何?例如,如果您想扩展和扩展 - 在智能家居解决方案中添加更多传感器,那么拥有一个庞大的应用程序就需要对其进行更改,维护以及维护具有各自需求的不同客户会更加困难。考虑模块化方式 - 一些离线功能的核心功能,但许多聚合器进程会与不同的传感器通信。这使得支持不同的设置和环境变得更加容易,并通过改进独立组件来维护整个系统。