我打算创建一个Android聊天应用。实际上聊天将成为应用程序的一项功能。我想知道有关Android聊天应用程序的最佳实践。我熟悉的两个选项是C2MD,每隔几秒就会对服务器数据库进行一次自定义轮询。
现在,我知道C2MD应该是伟大的,但是根据我的理解,它并不可靠。我试图实现它,它似乎没有工作。此外,如果由于某种原因谷歌结束时发生了某些事情(比如他们的服务器已关闭 - 不太可能但可能发生)我无法联系他们,而且他们正处于他们的时间范围内。
现在,如果我做自己的事情(我发送用户创建的消息的基本方法,然后定期检查服务器以查看是否有任何新消息到达)似乎没问题,除非为了拥有一个体面的用户经验,我对我的服务器的轮询必须像大约5秒左右,这就像疯了一样咀嚼电池。这是使用这种方法的主要缺点。
所以,我想知道有更好的方法,我不知道。请任何帮助,架构结构,任何有用的东西。
答案 0 :(得分:8)
您应该考虑使用XMPP。你可以搜索StackOverflow for Android XMPP,你最终可能会here推荐使用Smack的一些变体(一个XMPP客户端库)。
更新以发表评论
首先,XMPP是一种协议,而不是客户端或服务器。使用它的一个好处是可以广泛使用XMPP客户端和服务器实现。 Wikipedia article解决了您的大部分问题。
关于你对gtalk的评论:
XMPP网络的架构类似于电子邮件;任何人都可以运行自己的XMPP服务器,而且没有中央主服务器。
关于民意调查:
XMPP可以通过两种方式使用HTTP:轮询[21]和绑定。[22]现在不推荐使用的轮询方法实质上意味着XMPP客户端通过HTTP'GET'和'POST'请求定期提取(和发布)存储在服务器端数据库上的消息。通过HTTP绑定,客户端使用寿命更长的HTTP连接,以便在发送消息后立即接收消息。这种通知推送模型比轮询更有效,其中许多民意调查没有返回新数据。
它也可以使用WebSockets。
关于.NET集成(如果你需要它...如果你不需要,你可以运行自己的XMPP服务器),你可以只搜索StackOverflow for XMPP和.NET,你可以得到一些问题/想法.NET服务器与XMPP服务器的集成,例如:Opensource .Net Jabber/XMPP server?