4

我正在开发一个使用 Openfire XMPP 服务器的聊天网站,客户端使用 Smack API。使用 Smack API 的 Web 项目是使用 Play!使其成为 RESTful 的框架。我选择玩!因为它的异步编程产品(Comet Sockets/WebSockets)。

基本上,到目前为止,我的架构如下所示:

Openfire <-> 网络服务器 <-> 用户/浏览器。

为了也支持 Android 设备并最大化代码重用,我是否应该将 XMPP 客户端代码实现为网站和 Android 客户端通用的 RESTful Web 服务?

Openfire <-> Web 服务 <-> 网站 <-> 浏览器/用户。

Openfire <-> Web 服务 <-> Android 应用程序。

由于引入了中间 Web 服务,我担心可伸缩性问题?由于必须通过多个组件,我是否会在通信中引入延迟?

任何关于上述内容的建议都会有所帮助。谢谢。

4

2 回答 2

4

可扩展性的关键是解耦。因此,本质上您可以从“如果其中一个组件发生故障,其他组件是否会继续正常工作?”来考虑问题。除了避免世界末日场景之外,您还可以独立水平扩展每个组件。

考虑到这一点,现在让我们继续讨论您的特定用例。为层而建的层仍然让我对周围的一些 Java EE 架构感到噩梦。它不仅引入了不必要的延迟,而且还使查明问题变得更加困难。如果您的服务失败,是由 Web 服务器、Android 应用程序还是 Web 服务引起的?

如果您想要代码重用,请重用代码而不是复制组件。这就是图书馆的用途。将您的公共代码提取为库,并在 Web 服务器和 Android 应用程序中使用它。

于 2012-09-30T12:54:06.307 回答
1

我认为最好的办法是制作一个轻量级的网页,该网页在加载后直接从浏览器中使用 Web 服务(就像任何应用程序一样)。

所以 App 和 Webpage 的唯一区别是,每次用户访问时,浏览器都会加载该网页。

于 2012-09-27T16:38:59.213 回答