java - 使用 Openfire、Smack 和 Play 的聊天网站架构!框架

标签 java web-services playframework openfire smack

我正在开发一个使用 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/

相关文章:

java - 在 Java 8 中合并递归 Hashmap

java - 你能在没有设置数据库的情况下运行 hibernate 吗?

java - 在类里面找不到密码的 getter

java - Play 1.x 和 Akka 可以一起使用吗?

scala - 设置DNS查找时间以在Scala Play中生存

java - 在 spring-webflow 2.1 中使用 SPEL 测试空字符串

java - Jackson 的 Json 字符串到 java 对象映射失败

php - 将插入的数据[到数据库]发送回应用程序的推荐方法

java - Web 服务与 Servlet

scala - Play 2.7 中的 RequestScoped