Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该使用GCM进行设备间的实时通信吗?_Android_Sockets_Google Cloud Messaging - Fatal编程技术网

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

Android 我应该使用GCM进行设备间的实时通信吗?,android,sockets,google-cloud-messaging,Android,Sockets,Google Cloud Messaging,我正在为android做一个聊天应用程序。为此,我决定使用GCM(googlecloudmessaging)。但在对它做了一些研究之后,我读到它不应该被用来聊天之类的东西 我将实施上游消息传递(直接将数据从设备发送到GCM,无需发送到同步)。以下是我关注的问题: 这些信息会立即传送吗?(速度足够快,用户可以看到“键入”/seed) 如果所有设备都在线,那么GCM发送的消息到达客户端的保证是什么 我想使用GCM的主要原因是 GCM使用的电池寿命最少 这是一款仅适用于android的应用程序 如

我正在为android做一个聊天应用程序。为此,我决定使用GCM(googlecloudmessaging)。但在对它做了一些研究之后,我读到它不应该被用来聊天之类的东西

我将实施上游消息传递(直接将数据从设备发送到GCM,无需发送到同步)。以下是我关注的问题:

  • 这些信息会立即传送吗?(速度足够快,用户可以看到“键入”/seed)
  • 如果所有设备都在线,那么GCM发送的消息到达客户端的保证是什么
我想使用GCM的主要原因是

  • GCM使用的电池寿命最少
  • 这是一款仅适用于android的应用程序

  • 如果GCM不是我应该使用的,我应该使用什么?

    我正在处理一个类似的需求,并考虑能够显示反馈的需求,如键入/lastseen等,根据我的知识,基于XMPP的解决方案是合适的

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

    有了这么多的设置,你将能够进入一个阶段,在这个阶段,你可以获得诸如whatsapp和一些聊天客户端(如gtalk/pidginshows)的状态,如“输入”、“消失”

    它将大致给出现有聊天客户端的工作原理

    Ejabberd完全是用erlang编写的,如果您想扩展任何功能,必须了解erlang。(它是专为高度并发容错和不间断系统设计的,这在聊天应用程序中很有帮助

    GCM肯定能够在99.99%的时间内在android手机之间进行通信,不会有太多的延迟,但是如果你想像普通聊天应用程序一样拥有roasters状态,你必须彻底改造轮子

    更新:

    以下是考虑因素

    从客户机A到客户机B,我想与roasters发送聊天消息,不需要在任何中央服务器上存储消息,只需要在客户机上存储消息——XMPP(如whatsapp)

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

    如果您需要设备之间的通信,而不一定需要聊天,那么gcm就足够了。
    我目前正在我的应用程序中使用这种方法,该应用程序在试用版的playstore上实时运行,在大多数情况下都运行良好。到目前为止,我还没有看到太多瓶颈。

    这是一个很好的要点。假设我能处理好朋友(花名册)无论如何,GCM在节省电池方面不是更有效吗?使用GCM还有其他缺点吗?是的,GCM优化了电池利用率。但我们无法真正比较xmpp和GCM两者的用途不同。GCM用于调用android客户端,表示新数据到达,需要从应用服务器同步。同样,GCM如何ets要知道新数据何时到达我们的服务器,需要有一个xmpp连接(参考此链接)。来到Ejabberd,请检查xmpp通信中的节概念(消息、iq和状态),除此之外,在用户脱机时存储和传递消息(通过他们的mnesia db)并确保未丢失任何消息。pubsub(publish-subscribe)工作流如典型的群聊天,许多构成聊天应用程序基础的功能都是免费的,使用ejabberd服务器,而无需您实施它们。虽然使用ejabberd进行通信,但仍建议使用gcm进行推送通知。希望我清楚说明这两个实用程序的用途?Harvey,您是否能够完成聊天是gcm还是ejabberd?生产时有什么问题吗?Harvey,我对同样的问题和类似的要求感到困惑。你能帮我决定是否应该使用gcm来保存我的目的吗?@Ramesh你的观点是什么?嘿,newbiee,我已经更新了答案。你能指出哪些因素让你困惑吗!!