我应该使用GCM进行设备之间的实时通信吗?

时间:2015-05-10 12:45:41

标签: android sockets google-cloud-messaging

我正在为Android制作聊天应用程序。为此,我决定使用GCM(Google Cloud Messaging)。但是对它进行了一些研究后,我已经读到它不应该用于聊天之类的东西。

我将实现上游消息传递(直接从设备向GCM发送数据,无需发送到同步)。以下是我的担忧:

  • 邮件会立即传输吗? (足够快,用户可以看到'打字'/看到)
  • 如果所有设备都在线,那么GCM到达客户端的消息的保证是什么。

我想使用GCM的主要原因是

  1. GCM使用最少的电池寿命
  2. 这是一款仅适用于Android的应用。
  3. 如果GCM不是我应该使用的,我应该使用什么?

1 个答案:

答案 0 :(得分:1)

我正在制定类似的要求并考虑能够显示反馈的要求,例如输入/ lastseen等,根据我的知识,基于XMPP的解决方案是合适的。

您可以尝试使用ejabberd / mangooseim(开源)等可用的xmpp服务器,方法是将其安装在您的服务器上,并使用asmack或任何其他客户端Java库与您的服务器进行通信。 (有很多教程可供选择)。

通过这么多的设置,您将能够进入能够获得状态的阶段,例如"输入","去掉" whatsapp和一些聊天客户端如gtalk / pidgin显示。

它将粗略地了解现有聊天客户端的工作方式。

Ejabberd完全是用erlang编写的,如果你想扩展任何功能,那么erlang知识是必须的。 (它专为高度并发的容错和不间断系统而设计,有助于聊天应用。

GCM绝对能够在99.99%的时间内在Android手机之间进行通信而且没有太多延迟但是如果你想像正常的聊天应用程序一样拥有烘焙机状态,你将不得不彻底重新发明轮子。

<强>更新

以下是注意事项。

从客户端A到客户端B我想发送聊天消息与roaster并且不需要在任何中央服务器上存储消息,而只是在客户端上 - XMPP(如whatsapp)

如果您需要将所有通信存储在服务器中 - 使用sql驱动程序或mongodb驱动程序/ gcm的XMPP(取决于您的时间和资源)

如果您需要设备之间的通信不一定聊天,那么gcm就足够了。 我在我的应用程序中使用这种方法,目前在带有测试版的Playstore上运行,并且在大多数情况下它绝对正常。到目前为止,我还没有看到很多瓶颈。