我即将构建一个系统,该系统将拥有自己的引擎和前端用户界面。我希望尽可能地解耦这两个部分。引擎应该能够接受命令和数据,能够处理这些数据并返回一些结果。引擎的工作可能很长,客户端应该能够随时查询引擎的当前状态。
对于我来说,解耦前端/后端系统是新领域,我不确定最佳架构。我想让前端基于Web。它将通过表单向引擎发送命令,并通过ajax调用显示引擎输出和当前状态。我很可能在Tomcat中使用基于Spring的Web应用程序。
我的问题涉及引擎组件的最佳结构。这些是我正在考虑的可能性:
1. 在Web应用程序中实现引擎作为一组线程和数据结构。这里的优点是更简单的实现,前端和引擎之间的消息传递将很简单(仅仅是一些共享的数据结构)。缺点是前端和后端之间的紧密耦合,依赖于服务器容器来管理引擎(例如,如果Web服务器或Web应用程序崩溃,引擎也会崩溃)。
2. 将后端实现为独立的Java应用程序,并通过某个TCP端口公开其功能。我喜欢这种方法,因为它与Web服务器解耦。但是,我对所需的低级网络/通信代码量不是很满意。我更喜欢一些更高级别的消息传递,可以抽象出套接字等。
3. 使用像Spring DM Server这样的OSGi容器来托管Web应用程序和引擎。这种方法很好,因为网络编程代码不存在。引擎向OSGI容器公开服务,供Web应用程序使用。这里的缺点是需要学习新技术:OSGi的学习曲线和开销。另外,前端和后端再次耦合在一起,这并不是我想要的。换句话说,我无法将前端部署在任何旧的servlet容器中,它必须与引擎在同一个OSGi容器中。
我觉得RMI可能是此处的最佳选择,但是这仍然是我不熟悉的新技术领域,而且它仍然无法解释如何设计底层系统的架构。JMS呢?
感谢您提供的任何建议。
对于我来说,解耦前端/后端系统是新领域,我不确定最佳架构。我想让前端基于Web。它将通过表单向引擎发送命令,并通过ajax调用显示引擎输出和当前状态。我很可能在Tomcat中使用基于Spring的Web应用程序。
我的问题涉及引擎组件的最佳结构。这些是我正在考虑的可能性:
1. 在Web应用程序中实现引擎作为一组线程和数据结构。这里的优点是更简单的实现,前端和引擎之间的消息传递将很简单(仅仅是一些共享的数据结构)。缺点是前端和后端之间的紧密耦合,依赖于服务器容器来管理引擎(例如,如果Web服务器或Web应用程序崩溃,引擎也会崩溃)。
2. 将后端实现为独立的Java应用程序,并通过某个TCP端口公开其功能。我喜欢这种方法,因为它与Web服务器解耦。但是,我对所需的低级网络/通信代码量不是很满意。我更喜欢一些更高级别的消息传递,可以抽象出套接字等。
3. 使用像Spring DM Server这样的OSGi容器来托管Web应用程序和引擎。这种方法很好,因为网络编程代码不存在。引擎向OSGI容器公开服务,供Web应用程序使用。这里的缺点是需要学习新技术:OSGi的学习曲线和开销。另外,前端和后端再次耦合在一起,这并不是我想要的。换句话说,我无法将前端部署在任何旧的servlet容器中,它必须与引擎在同一个OSGi容器中。
我觉得RMI可能是此处的最佳选择,但是这仍然是我不熟悉的新技术领域,而且它仍然无法解释如何设计底层系统的架构。JMS呢?
感谢您提供的任何建议。