3

我想在跨平台移动客户端(Android、PC - 用Ja ​​va编写和 iOS 用Objective-C编写)和我的 Google AppEngine(Java)服务器之间实现双向通信。它应该:

  1. 允许每一方发起通信(在客户端连接后)。
  2. 具有相对较短的延迟(每 X 秒轮询一次是有问题的,据我了解,因为它在 AppEngine 上,所以不能长时间轮询 http 请求)。
  3. 支持最多只有几 KB 文本的消息,而且通常要小得多。

我曾考虑将 Channel API 与一些反向工程 Java 客户端一起使用,但这似乎是在冒险(因为它不受官方支持)。另外,我什至不确定是否有针对 Objective-C 的解决方案,而且我不想自己深入研究并实现它。

然后我考虑使用 XMPP。但是,我不确定如果不让我的用户输入 Jabber 帐户,这是怎么可能的,我不能(通信在后台)。有没有办法为我的客户创建一个临时用户?

C2DM 似乎也不是一个好的选择。它不是跨平台的,看起来很注重“通知”而不是交流,并且不保证消息传递的成功。

或者也许有一种我没有想到的完全不同的方法?这种类型的交流对我来说相对较新。

谢谢!

编辑:

由于我正在寻找后台通信,我想到了一个新选项:单个 XMPP 用户,资源作为客户端标识符。这意味着,我将为我的应用程序创建一个 XMPP 用户(例如:“AppBackgroundUser@domain.com”),并让客户端使用他们自己的唯一 ID 作为资源(“AppBackgroundUser@domain.com/UNIQUEID” )。这种方法是否有任何缺点或严重的安全漏洞?

4

2 回答 2

2

我能想到的两个选择:

  • 您可以在 Java 应用程序中嵌入 HTML 页面,并将 Channel API 用于其匿名端点。然后在收到消息时向您的应用发出信号。这不会受到 Channel API 实现中变化莫测的影响。
  • 如果您想使用 XMPP API,您需要某种 XMPP 帐户是正确的。您可以考虑在 AWS 或其他地方运行一个非常简单的 XMPP 服务器并将您的客户端连接到该服务器;然后您可以将消息从您的 App Engine 应用程序发送到您自己服务器上的地址。ejabberd 似乎是首选服务。
于 2012-01-31T14:07:45.513 回答
0

XMPP 似乎是您最好的选择,但您需要配置您的服务器以允许匿名客户端绕过您的注册问题。

不过,我不确定您所说的任何一方发起通信是什么意思。XMPP 将要求客户端通过连接到服务器来启动,但之后它可以接收自发的消息。当然,如果服务器的意图是向客户端发送未经提示的消息,那么如果没有某种客户端身份(这意味着某种形式的注册),您如何知道哪个客户端?

于 2012-01-31T17:43:20.673 回答