文档章节

Android Push开源解决方案

雨焰
 雨焰
发布于 2012/10/23 17:08
字数 1246
阅读 1456
收藏 18

在 Android 上,因为 Google 自己实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,所以,对于开发者来说,如果需要 Push功能,怎么样选择成为了一个问题。

到目前为止,国内尚没有完全向开发者免费、开放的 Push 服务可用。国外有几家第三方推送服务,但一般都要收费。所以一般来说,国内的开发者不得不考虑自己来搭建 Push服务。

自己构建 Push服务时,一个比较自然的选择就是,基于开源的现在方案来做。

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

上面文章提及的方案里,基本上都提及了一个开源的 Android Push实现: androidpn

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/

本文转载自:http://iandroiddev.com/post/2012-10-19/40040838899

共有 人打赏支持
雨焰
粉丝 59
博文 254
码字总数 46542
作品 0
新乡
程序员
私信 提问
加载中

评论(4)

JavenFang
JavenFang

引用来自“雨焰”的评论

引用来自“JavenFang”的评论

原文出处在这里,请楼主修正: http://blog.jpush.cn/index.php/android_push_opensource_androidpn_xmpp_openfire/

谢谢!

我在博客中添加了您的原文出处,但是我觉得不应该删除之前的,毕竟我是从那个网址中看到您写的这篇博客,所以我觉得也要尊重别人!您说呢?

没事。 谢谢!
雨焰
雨焰

引用来自“JavenFang”的评论

原文出处在这里,请楼主修正: http://blog.jpush.cn/index.php/android_push_opensource_androidpn_xmpp_openfire/

谢谢!

我在博客中添加了您的原文出处,但是我觉得不应该删除之前的,毕竟我是从那个网址中看到您写的这篇博客,所以我觉得也要尊重别人!您说呢?
JavenFang
JavenFang
原文出处在这里,请楼主修正: http://blog.jpush.cn/index.php/android_push_opensource_androidpn_xmpp_openfire/

谢谢!
OpenIoT
OpenIoT
顶一个
Android Push 开源方案解析

在 Android 上,因为 Google 自己实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,所以,对于开发者来说,如果需要 Push功能,怎么样选择成为了一个问题...

极光推送
2012/11/30
5.8K
85
Android 推送通知指南

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比...

鉴客
2011/10/16
32.7K
35
Android实现推送方式解决方案

  本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅...

穆哥哥
2013/07/08
0
1
Android实现推送方式解决方案

1.推送方式基础知识:   在移动互联网时代以前的手机,如果有事情发生需要通知用户,则会有一个窗口弹出,将告诉用户正在发生什么事情。可能是未接电话的提示,日历的提醒,或是一封新的彩...

大米被占用
2013/11/13
0
0
Android推送通知指南

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户 端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对...

LiSteven
2013/03/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Scala实战:迁移文件

Scala作为script使用也是非常的方便。 原文地址:https://www.yangbajing.me/2019/03/22/scala实战:迁移文件/ 前因 最近因为线上文件越来越多,导致磁盘不够用。需要将磁盘上数据迁移到一块...

羊八井
36分钟前
0
0
vagrant

安装virtualbox、vagrant,重启电脑 创建目录vagrant_ubuntu1804,进入目录后 vagrant box add http://mirrors.ustc.edu.cn/ubuntu-cloud-images/bionic/20190312.1/bionic-server-cloudimg-......

chuqq
47分钟前
0
0
Java 多线程测试 笔记(一)

测试 没有Synchronized的并发 结果 用比较实际的方式测试,比如说卖东西,赚钱 public class Sell implements Runnable { static Sell sell = new Sell(); //商品总数 sta...

_大侠__
47分钟前
1
0
《大话数据结构》读后总结(四)

一、算法 1、算法效率的度量方法 1.1 事后统计方法 通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。该方法具有很大缺陷,不...

徐曙辉
今天
3
0
Android 整体设计及背后意义

阿里妹导读:现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有...

阿里云云栖社区
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部