客户端-服务器架构:100% Android(Android 作为服务器)还是 Java EE+Android?

Client-Server architecture: 100% Android (Android as a server) or Java EE+Android?

上下文

我正在考虑采用 Java 的客户端-服务器架构。这个想法是几个 Android 平板电脑(假设大约 15 个)需要显示来自服务器的内容。内容可能会随时间变化(例如白天显示 v/s 夜间显示)。此外,平板电脑还会显示 Yes / No(或绿色/红色)按钮加上 free-text 评论字段。

每天收集评论并通过电子邮件发送报告。

于是就有了双向通信:

我试图寻找最佳实践,但我无法得到准确的答案,因为人们相当假设 server/client 架构会导致 J2EE-Android Java 编程。

这是我的问题:[哪种] 以下解决方案是最佳实践?

我真的没有在这里看到任何 'Android' 特定的东西。我想你不应该束缚自己。

我认为您的第一个解决方案(将平板电脑用作服务器)不适合该任务。它不可扩展,甚至不够稳定。平板电脑不是真正的服务器。您将失去使用为服务器可用性、性能监控等发明的所有工具的可能性。

所以,当然,你应该在那里有一个单独的服务器。但它不一定是 J2EE。它可以是简单的 Netty 服务器一段时间。或者 ZeroMQ 一个。

在任何情况下,您都不应该将自己束缚在 'android' 上。与服务器的所有交换都应该使用通用和简单的格式来完成。以 JSON 为例。因此,如果您使用的格式支持布尔类型,无论您的客户理解什么,都不要将布尔字段作为 'Y'/'N' 值发送。为此使用布尔类型。

问:以下哪种解决方案 [1) 2) 3) ] 是最佳实践?

A: 价格方面/时间方面/性能方面 1) 但一旦从 1:15 答案摘要中移动,可扩展性方面可能会遇到问题一天到一些 1:1.000.000 或 1:10.000.000 范围。

ZeroMQ 将是我的首选。它拥有您身边所有最强大的部分{价格方面/时间方面/性能方面}以及可扩展性和性能以及快速原型制作方面。

话虽如此,您不会花费一个人*天的精力来构建任何东西,而是构建完成任务所需的功能。 ZeroMQ 在智能消息传递端完成剩下的工作。它创建(好吧,它已经创建了)一个框架(而不是一组低级元素)。

在此框架之上构建可让您专注于您的主要目标 - 服务(而不是支持元素的低级细节)。

因此你可以从性能扩展中抽象出来(ZeroMQ 允许你重新使用设计者的知识,他们已经购买了所有必要的东西,包括对故障恢复自我修复性能可扩展场景,无需重新设计您的顶级服务。

这绝对值得顶级 class 专家数百万*天的努力,您几乎没有预算和时间来(重新)花钱来接近您的目标在 ZeroMQ 框架中为您的项目中的高级任务做好准备。

如果您的规模经济适用于 15 台平板电脑(用户)Android UI(这意味着您必须掌握 Android 无论如何),去熟悉 ZeroMQ,因为重新使用它的绑定来匹配和去(许多绑定可用并且已经稳定多年用于许多(如果不是全部)其他生产级语言(Ada, C、C#、C++、Erlang、F#、FORTRAN、Go、java、LISP、Node.js、pascal、perl、PHP、Python、Objective-C Scala、Smalltalk ... 仅举几例)因此,您在该领域的智力投入 将在进一步的项目中得到回报 ,而不是在没有任何投资回报率的情况下获得赤裸裸的曝光在那 ).

下一个最佳步骤是什么?

我的建议是花时间阅读 Pieter HINTJENS 的书 "Code Connected, Volume 1"。 Pieter 是 ZeroMQ 框架的创始人之一,他分享了很多关于如何在分布式、容易出错的进程到进程消息传递环境中生存的见解。确实值得将时间花在他的伟大见解上。


诺塔贝内

问:您是否定义了您的最佳实践指标

答: 不。这可能(并且将)扭曲您可能期望收到的答案。