首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用长轮询实现android聊天模块

使用长轮询实现android聊天模块
EN

Stack Overflow用户
提问于 2012-11-02 09:19:03
回答 1查看 3.2K关注 0票数 1

我正在编写一个Android应用程序,功能之一是有一个聊天模块。我选择使用长轮询来实现聊天。

因为我试图避免耗尽用户的手机电池,所以我想在实现中添加一个GCM消息平台,通知设备新的消息。

这样做的想法是,当用户在屏幕上打开应用程序时,使用长轮询,这样进行实时聊天将是快速的,并且不涉及发送大量GCM消息,而在空闲时,服务器将知道用户当前没有轮询,并将向设备发送GCM消息,以便在新消息到达时唤醒它。

我正在努力解决实施这种方法的几个问题:

  1. 了解用户状态的最佳方法是立即轮询或等待推送消息唤醒它。我是否应该将应用程序设置为在服务器进入休眠状态时通知服务器,还是服务器应该自行检测它?
  2. 如果我将其设置为应用程序将通知服务器何时在模式之间切换,那么在此通知未通过的情况下如何恢复。(当客户端在等待gcm时,服务器认为这是轮询,不会发送.)
  3. 我经历了一些情况,客户端正在轮询,而服务器即使在收到新消息时也没有响应。可能是某种客户端不知道的服务器超时.如果这是一个bug,我会修复它,但当客户端认为它是轮询而服务器不知道时,我能做什么(请求的超时时间太长,无法等待下一次轮询)。

我的客户是本地Android,Webservice是WCF (C#)。

任何想法都会有帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-11-02 09:42:41

我还没有使用GCM,但我有很多移动消息应用程序的经验,所以我将尝试解释我们遵循的内容。

了解用户状态的最佳方法是什么?

首先,当应用程序处于领先位置时,长时间的民意调查并不是接收即时消息的最佳方式。您需要打开tcp连接才能立即接收它!(希望您的通知也包含该消息)任何类型的轮询都将确保您浪费电池,而不是重新接收即时消息。第二,我认为客户端应该告知服务器其状态(前台/背景),以便服务器知道如何响应。因此,我的建议是使用TCP套接字作为CIR的备份,并在后台使用轮询(以防服务器丢失“客户端转到后台消息”)。

  1. 要恢复,请使用长轮询(10分钟)从服务器获得更新,并通知服务器您的状态。
  2. 如果您使用我提到的方法(使用tcp套接字),服务器应该知道您的应用程序在前台,只要连接是活动的。此外,服务器应该始终使用增量更新来响应轮询(您的轮询应该在服务器上次发送内容时发送)

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13192407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档