我正在编写一个 Android 应用程序,其中包含一个聊天模块。我选择使用长轮询来实现聊天。
因为我试图避免耗尽用户手机电池,所以我考虑在实现中添加一个 GCM 消息平台来通知设备有关新消息的信息。
这个想法是在用户在他的屏幕上打开应用程序时使用长轮询,因此参与实时聊天会很快并且不涉及发送大量 GCM 消息,而当空闲时,服务器会知道用户正在当前没有轮询,并且会在新消息到达时向设备发送 GCM 消息以将其唤醒。
我正在努力解决实现此方法的一些问题:
了解用户状态的最佳方式是什么 - 他是现在轮询还是等待推送消息将其唤醒。我应该将应用程序设置为在它进入睡眠状态时通知服务器还是服务器应该自行检测它?
如果我将其设置为应用程序将通知服务器何时在模式之间切换,如果此通知未通过,我该如何恢复。(当客户端正在等待 gcm 并且服务器认为它正在轮询并且不会发送一个..)
我遇到了一些客户端正在轮询并且服务器即使收到新消息也没有响应的情况。也许客户端不知道服务器上的某种超时......如果这是一个错误,我会修复它,但是如果客户端认为它正在轮询而服务器不知道它,我该怎么办(请求的超时时间太长,无法等待下一次轮询)。
我的客户端是原生 Android,Web 服务是 WCF (C#)。
任何想法都会有所帮助。