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

时间:2013-09-13 20:02:46

标签: java apache node.js raspberry-pi inter-process-communicat

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

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

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

我希望此插图能清楚地说明系统的工作原理:

enter image description here

主要问题是:

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

并且您是否建议使用除上述工作之外的特定服务器?

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

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

2 - 沟通渠道:

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

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

使用的操作系统: Linux Raspbian

修改

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

欢迎所有相关建议,TQ

1 个答案:

答案 0 :(得分:4)

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

特别针对您的情况,我可以看出ZeroMQ最合适 的理由:

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

<强>考虑:

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

需要考虑的几点
为什么选择Java,以及模块化方法呢?例如,如果您想扩展和扩展 - 将更多传感器添加到智能家居解决方案中,那么拥有一个巨大的应用程序将需要更改它,维护和维护不同客户端的自身需求更加困难。思考模块化方式 - 离线内容的一些核心功能,但许多聚合器进程可以与不同的传感器通信。这样可以更轻松地支持不同的设置和环境,并通过改进独立组件来维护整个系统。