10

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

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

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

我希望这张图清楚地展示了系统是如何工作的:

在此处输入图像描述

主要问题是:

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

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

到目前为止我的想法是:

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

2-沟通渠道:

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

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

使用的操作系统: Linux Raspbian

编辑:

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

欢迎所有相关建议,TQ

4

1 回答 1

4

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

对于您的具体情况,我可以看到ZeroMQ将是最合适的。
原因:

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

注意事项:

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

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

于 2013-09-13T20:57:53.173 回答