GAE与客户端的双向通信(Java / iOS客户端的通道API替代方案,或者可能是XMPP)?

时间:2012-01-31 08:28:57

标签: google-app-engine xmpp channel-api

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

  1. 允许双方发起通信(在客户端连接后)。
  2. 具有相对短延迟(每X秒轮询是有问题的,据我所知,因为它在AppEngine上,所以长时间轮询http请求不是一个选项)。
  3. 支持最多几KB文本的消息,通常小得多。
  4. 我考虑过使用Channel API和一些反向工程Java客户端,但这似乎有机会(因为它没有得到官方支持)。另外,我甚至不确定是否有针对Objective-C的解决方案,我不想自己潜入并实施它。

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

    C2DM似乎也不是一个好选择。它不是跨平台的,它似乎非常注重“通知”而不是通信,并且不保证消息传输的成功。

    或者可能有一种我没有想过的完全不同的方法?这种沟通对我来说相对较新。

    谢谢!

    编辑:

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

2 个答案:

答案 0 :(得分:2)

我能想到的两个选择:

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

答案 1 :(得分:0)

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

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