Android Real-Time应用程序

时间:2014-12-20 12:33:53

标签: android node.js sockets websocket socket.io

我正在开发app用户之间的共享任务。通过Google Cloud Messaging,我可以通知用户目标他已共享新任务。问题是:GCM不提供送货保证。有人会使用像WhatsApp这样的应用程序,如果他花了几分钟时间传递消息或者没有到手?这是我对GCM的问题。

所以我有一个解决方案:使用Socket !!!

使用Socket.oi和Node.js,我的梦想变得真正像魔术一样! 但由于没有任何东西是免费的,保持插座连接的电池成本非常高。有些人认为在没有通信的情况下使用Sockets,没有任何进出,没有循环,所以没有消耗。

我的朋友们,我读了很多文字,不知道应该遵循什么方法。我问你的帮助。 Soket.oi? WebSocket ???

如何保持与我的服务器permante的连接,保留大部分电池?

感谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

Socket.io很好,在许多实时应用程序中肯定很有用,但是当应用程序被用户终止时会发生什么?或者,如果用户重新启动手机?那你怎么会收到通知呢?

出于所有目的,GCM足够好了。

答案 1 :(得分:0)

您需要使用套接字连接和GCM的混合。两种连接类型都不保证传递,因此您需要实现检查消息历史记录一致性的机制。

简化的场景可能如下所示:

  1. 用户启动您的客户
  2. 客户端应用在GCM注册并将google ID发送到您的服务器。
  3. 客户端应用程序建立套接字连接
  4. 您的服务器通过GCM 套接字连接(如果通过特定连接建立)向客户端发送消息
  5. 每条消息都有唯一的ID,因此客户端可以忽略来自Google的套接字连接的第二条相同消息
  6. 关于未发送消息:

    当客户端通过套接字连接连接到服务器时,它应该接收应该放置消息历史的响应。它不应该是完整的历史记录,它可能只是最后的消息(如果你开发聊天应用程序)。然后,客户端只检查他是否已通知用户有关上一条消息的信息。如果没有,那么您的客户端向您的服务器发出请求(http或通过套接字)并接收未传递的消息。

    电池消耗:

    不要获取唤醒锁以维持套接字连接!设备必须睡觉。 GCM将唤醒手机。