【问题标题】:Inter-process-communication between a Java application and a local serverJava 应用程序和本地服务器之间的进程间通信
【发布时间】:2013-09-18 14:46:02
【问题描述】:

首先向所有程序员干杯 [今天 = 程序员日 :)]

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

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

我希望这张插图清楚地展示了系统的工作原理:

主要问题是:

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

并且您是否为这项工作推荐了除上述服务器之外的特定服务器?

到目前为止我想到了什么:

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

2-沟通渠道:

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

B- 通过端口的进程间通信(套接字通信)似乎是最好的解决方案,但我不知道这会在运营成本和通信错误方面发生什么变化。

使用的操作系统: Linux Raspbian

编辑:

我确信 ZMQ+Apache 足以胜任这项任务,但与 WebServices(如 SOAP)相比如何呢?就标准实现和安全性而言,WebServices 会是更好的解决方案吗?

欢迎所有相关建议,TQ

【问题讨论】:

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


    【解决方案1】:

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

    对于您的具体情况,我认为ZeroMQ 是最合适的。
    原因:

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

    注意事项:

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

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

    【讨论】:

    • 一个迷人的答案!我只是不知道ZeroMQ,所以我必须先对其进行测试以了解它是否是解决方案,并且根据您的描述听起来确实不错。关于拥有更多的传感器,实际上图中的系统被简化为更专注于要点。它更像是一个连接到那个USB端口的无线发射器,是通讯端口。在房子周围的所有 MCU 之间使用 ID,因此多个传感器也可以工作。为什么是java,是因为我曾经使用它通过USB上的无线发射器与MCU通信并且成功+线程。
    • 嗨,我回来了。经过大量的阅读和试​​验,ZeroMQ 在 Java 中使用起来很烦人和令人沮丧。我成功地为 Windows 编译了它,并为此浪费了很多时间,但最终它没有用。还有一件事让我考虑寻找另一种方法,它使用 dll 和基于 Windows 的文件以便在 Windows 上运行。我正在 Windows 上开发,但我会在基于 Linux 的系统上运行它。Apache+PHP 和 java 是跨平台的,但是当我在 Linux 上部署它时,这个 ZMQ 听起来确实会给我带来麻烦。让您随时了解情况是正确的。
    • 嗨!感谢您发布。我在 windows 和 linux(ubuntu、centos)和 Mac OS X 上使用 ZeroMQ,并且在任何这些系统上编译都没有问题。您可能希望按照官方文档进行编译和安装 - 它应该没问题。 Linux 编译更加容易(但两者都使用官方文档直接进行)。您说过:“但最终它没有工作”您的意思是 - 您无法安装它并使其工作,或者实际的 ZeroMQ 不符合您的需求?您可能想阅读他们的介绍指南,以便在 hack 之前熟悉概念..
    • 编译ZMQ之类的库是日常开发人员生活中非常普遍的需求,尤其是后端开发人员。我已经为每个平台重新编译了一次,这是一个简单的过程。我正在使用 ZMQ:.Net、node.js、C++。
    • 最近有来自 zmq 的 fork repo,可以在 windows 上编译,但现在看起来它已经消失了。他们正式不支持 Windows,有一些解决方法 - 但是,是的,现在是地狱。与 zmq 的 npm 模块相同。所以可能使用linux :)
    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多