Android Push开源解决方案

在 Android 上,由于 Google 本身实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,因此,对于开发者来讲,若是须要 Push功能,怎么样选择成为了一个问题。 php

到目前为止,国内尚没有彻底向开发者免费、开放的 Push 服务可用。国外有几家第三方推送服务,但通常都要收费。因此通常来讲,国内的开发者不得不考虑本身来搭建 Push服务。 html

本身构建 Push服务时,一个比较天然的选择就是,基于开源的如今方案来作。 android

使用 Google或者百度搜索 “Android Push 推送”等关键词,代表已经有很多人研究过。排在前边的是这样几篇文章: 服务器

上面文章说起的方案里,基本上都说起了一个开源的 Android Push实现: androidpnide

androidpn 它本质上服务器端基于 Openfire,客户端基于 asmack,这两者都最 XMPP  IM 开源实现里的二个基本组件,应该说 androidpn 只是把两者更多地结合起来用于作 Push的场景。 测试

本人作过聊天App,愿意在这里,把基于 XMPP开源系统作 IM 的实践经验分享给你们。

咱们作聊天类App,比较天然地,刚开始时也是从研究开源的 XMPP IM 系统入手。

先说服务器端选择。Openfire 是一个 XMPP  最古老的开源 IM Server,几乎全部作 IM 的都应该有研究过。可是,它也是最不合适运用到生产的 IM Server,由于:单机并发颇有限,集群方案不成熟,代码古老而缺少及时更新。举个具体的例子:Openfire 的集群组件叫 Connection Manager,可是,你在 Openfire官方网站能够看到,最近一个版本是 2009 年 2 月份发布的。可见,基于 Openfire 实现的 androidpn 的根基是不够稳的。

还有另外二个其实相对好一点的选择: ejabberdtigaseejabberd 是用 Erlang语言实现的,懂 Erlang 的用户不多,因此通常不会选。咱们当时初步的聊天服务器端选择是 tigase


tigase 做者维护很活跃,集群测试结果可以支撑比较大的容量,这是吸引咱们的地方。但通过实际生产运营状况来看,因为其集群方案实现的复杂性,以及单节点容量的有限,咱们对支撑到 50 万用户在集群节点上没有信心,因此在到达 50 万用户以前,赶快本身开发了替代方案。

再来讲 XMPP 协议与客户端的问题:对于移动客户端来讲,原始的 XMPP 有些复杂并且流量消耗大。XMPP 本质上协议体都在字符串的 xml 结构上,每一个协议都量一堆的字符串,xml里还有不少无心义的结构。另外,XMPP为了其灵活性,就登陆这个事情都须要有 N 个来回。对于手机客户端很在意流量与电量来讲,XMPP 比较笨重。

咱们的做法是:协议格式上改成二进制,协议内容上简化交互,但保留对原始  XMPP的兼容。

androidpn 是开源的 Push 实现,是基于 XMPP 开源组件集成的,它没有为手机应用场景作必要的优化。另外,XMPP  本质上双向 IM 协议,而直接基于 XMPP 来实现 Push 功能,也是没有特别地为  Push 的特色优化的,好比客户端网络链接的策略等。

总结一下以 androidpn 为典型的开源 Android Push 方案会存在的问题:

1)容量大了开源服务器实现顶不住,仍是须要本身去改进开源实现,或者彻底从新用新方案,开发投入与高成本是不可避免的。

2)协议与实现上如流量消耗、网络链接策略等,不是专门为移动 Push 优化过的,是不经济的。

基于咱们团队基于 XMPP开源系统实现聊天App的实践经验,咱们得出的结论是,在移动端的 IM场景里,开源方案不是个可用好用的方案。后来咱们本身彻底从新架构了整套系统。以后,正是基于这套全新架构的 IM 系统,演变出来了极光推送

极光推送专门为移动场景下的实时 Push 来研发,咱们想要去解决国内 Android 开发者没有可用好用的 Push方案的问题,是免费的,彻底向普通开发者开放。若是你也有这个 Android Push 的需求,不妨到极光推送官方网站进一步地了解。

原始文章出处:http://blog.jpush.cn/index.php/android_push_opensource_androidpn_xmpp_openfire/

相关文章
相关标签/搜索