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

10

首先祝所有程序员们节日快乐(今天是程序员日 :))

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

现在我还在规划阶段,我不确定哪些技术最适合这个项目。我考虑使用Node.js或Apache作为服务器,使用Java应用程序作为后端,以及任何SQL数据库作为应用程序的SRS。

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

enter image description here

主要问题是:

如何使Java应用程序与服务器通信(通信渠道[必须是双向])?

并且您是否推荐除上述服务器之外的特定服务器来完成此工作?

到目前为止,我想到了以下几点:

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

2-通信渠道:

A- 这是一个共享文件,但这是一个不好的想法,因为我不希望应用程序时常检查文件内容(接收命令)是否有变化(过多操作)。

B- 通过端口(套接字通信)进行进程间通信似乎是最好的解决方案,但我不知道在操作成本和通信错误方面会出现什么情况。

所用操作系统:Linux Raspbian

编辑:

我确定ZMQ+Apache足以完成此任务,但与Web服务(如SOAP)相比如何?从标准实现和安全性方面来看,Web服务是否是更好的解决方案?

欢迎提出所有相关建议,谢谢!

1个回答

4

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

针对您的情况,我认为ZeroMQ是最佳选择。
原因:

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

注意事项:

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

还有几点需要考虑:
为什么选择Java?模块化方法怎么样?例如,如果您想将更多传感器添加到智能家居解决方案中,则拥有一个巨大的应用程序将需要更改它,这也更难维护,并且需要满足自己的需求。考虑模块化方式-离线内容的一些核心功能,但许多聚合器进程将与不同的传感器交互。这使得更容易支持不同的设置和环境,并通过改进独立组件来维护整个系统。


嗨,我回来了。经过大量阅读和尝试,我发现在Java中使用ZeroMQ非常烦人和令人沮丧。我成功地为Windows编译了它,并浪费了很多时间,但最终它没有起作用。另外一件让我开始考虑寻找其他方法的事情是,它使用dll和基于Windows的文件才能在Windows上运行。我正在Windows上开发,但我将在基于Linux的系统上运行它。Apache+PHP和Java是跨平台的,但这个ZMQ似乎会在我之后在Linux上部署时给我带来麻烦。只是觉得应该让你知道最新情况。 - CME64
嗨!感谢您的发布。我在Windows和Linux(Ubuntu,CentOS)以及Mac OS X上使用ZeroMQ,并且在这些系统上编译没有遇到任何问题。您可能希望遵循官方文档进行编译和安装-这应该没问题。Linux编译甚至更容易(但两者都只需使用官方文档即可)。您说:“但最终它没有起作用”,您是指您无法安装它并使其正常工作,还是实际的ZeroMQ不符合您的需求?在开始操作之前,您可能需要阅读他们的介绍指南以熟悉概念。 - moka
1
编译像ZMQ这样的库是日常开发者生活中非常普遍的需求,特别是对于后端开发者而言。我已经为每个平台重新编译过一次,这是一个非常简单明了的过程。我正在使用ZMQ与:.Net、node.js和C++。 - moka
我从未说过ZMQ不容易构建,我的问题特定于JZMQ,并查找互联网上遇到麻烦的人数。只是提一下,在Linux上,编译JZMQ不到10分钟,它就像魔法一样工作,但在Windows上...你甚至必须修改一些代码,在MS-VS中放置一些库文件,并查找出现在长系列中的每个问题,以便编译...特别是对于x64位...无论如何,现在这不重要,我想在Linux上使用它。 - CME64
1
最近从zmq分叉了一个仓库,可以在Windows上编译,但现在看起来已经消失了。官方表示他们不支持Windows,虽然有解决方法,但现在是个麻烦事。 npm模块的情况也一样。 所以最好使用Linux :) - moka
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接