2011-05-16 27 views
1

我正在为android应用程序编写应用程序,其中两个设备应该通过互联网相互通信。除此任务外,他们还通过REST与EJB3服务器进行通信。所以我决定一举两得,并使用REST + EJB3在两个配对的Android设备之间传输数据。 所以我实现的情景是这样的:通过http REST和EJB3连接两个android应用程序

  • 这两个设备连接到服务器并获取会话ID。
  • 第一设备将数据发送到第二设备
  • 服务器获取数据,但并没有结束HTTP请求,而是付诸等待池
  • 第二设备要求数据
  • Server中的数据传输到第二个设备并释放第一个设备的等待连接(和线程)。
  • 如果没有第一个或第二个设备请求,则对方等待服务器端的超时,然后再次发送请求。我们需要等待服务器端的数据在数据到达后立即停止响应。

因此,在这种模式中我看到两个缺点: - 在服务器端等待线程 - 他们消耗服务器资源,并作为结果限制服务器的吞吐量 - 如果服务器线程将不会等待一个答案有超时,那么客户应该重复请求并花费大量流量。

这种问题的最佳实践解决方案是什么?

P.S:忘了提及两台设备应该尽可能平滑和快速地交换数据。

回答

2

您将需要使用C2DM http://android-developers.blogspot.com/2010/05/android-cloud-to-device-messaging.html

当需要从A发送到B的消息 - 一个应该连接到服务器,并根据数据类型/量 - 服务器要么通过C2DM推送数据或只是告诉设备B返回并获取数据。

无论如何,我会将数据存储在服务器上。如果推送失败 - 您可以重试。无需重新发明轮子。 C2DM中已解决的大多数问题/问题

+0

感谢您的链接,但是如果我需要从版本1.6开始在Android上运行我的应用程序,该怎么办。据我了解C2DM支持仅在2.2版本中添加... – 2011-05-16 18:08:29

+0

没有推 - 你不能达到“顺利和快速”的要求。您可以使用设备A将数据写入服务器,但设备B必须定期进行更新。这样做往往会导致电池无法使用。从我所知道的你不能依赖设备和服务器之间的连接。 IP可能会改变,无线开关等。 – katit 2011-05-16 18:23:36

+0

Yeap,我也知道这一点,这就是为什么我问这个问题。但我真的需要从1.6开始的所有版本的解决方案。任何其他想法? – 2011-05-16 18:53:57

相关问题