我正在开发一个使用 Openfire XMPP 服务器的聊天网站,客户端使用 Smack API。使用 Smack API 的 Web 项目是使用 Play!使它成为 RESTful 的框架。我选择玩!因为它提供异步编程(Comet Sockets/WebSockets)。
基本上,到目前为止,我的架构如下所示:
Openfire <-> Web 服务器 <-> 用户/浏览器。
为了也支持 Android 设备并最大限度地重用代码,我是否应该将 XMPP 客户端代码实现为网站和 Android 客户端通用的 RESTful 网络服务?
Openfire <-> Web 服务 <-> 网站 <-> 浏览器/用户。
Openfire <-> 网络服务 <-> Android 应用。
我担心可扩展性问题,因为引入了中间网络服务?由于必须经过多个组件,我是否会在通信中引入延迟?
以上任何建议都会有所帮助。谢谢。
最佳答案
可扩展性的关键是解耦。因此,从本质上讲,您可以从“如果其中一个组件发生故障,其他组件是否会继续正常工作?”的角度来考虑问题。除了避免世界末日的情况,您还可以独立地水平扩展每个组件。
考虑到这一点,现在让我们继续讨论您的具体用例。为了层而层,仍然让我看到一些 Java EE 架构的噩梦。它不仅会引入不必要的延迟,还会使查明问题变得更加困难。如果您的服务失败,是网络服务器、Android 应用程序还是网络服务导致的失败?
如果你想重用代码,重用代码而不是复制组件。这就是图书馆的用途。将您的常用代码提取为一个库,并在 Web 服务器和 Android 应用程序中使用它。
关于java - 使用 Openfire、Smack 和 Play 的聊天网站架构!框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555568/