热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android推送开源方案解析

在Android上,因为Google自己实现的Android标配的GCM(GoogleCloudMessaging,原来叫C2DM)在国内基本不可用&#

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

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

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

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

  • Android实现推送方式解决方案
  • 用androidpn来实现推送
  • Android上实现Push
  • Android Push Notification实现信息推送使用

上面文章提及的方案里,基本上都提及了一个开源的 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 的根基是不够稳的。

还有另外二个其实相对好一点的选择: ejabberd, tigase。ejabberd 是用 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 的需求,不妨到极光推送官方网站进一步地了解。

 

转:https://www.cnblogs.com/jpush/archive/2012/10/29/android_push_androidpn_openfire_mqtt.html



推荐阅读
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 如何高效查看Java API和源码
    在Java学习过程中,查看API文档和源码是提高编程能力的重要手段。本文将详细介绍如何使用各种工具和方法高效地查看Java API和源码。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 探讨Redis的最佳应用场景
    本文将深入探讨Redis在不同场景下的最佳应用,包括其优势和适用范围。 ... [详细]
  • Flutter 开发中集成极光推送的详细步骤
    本文详细介绍了如何在 Flutter 项目中集成极光推送服务,包括配置和测试的具体步骤。 ... [详细]
  • Scrum立会报告+燃尽图(十月十七日总第八次):分配Alpha阶段任务
    此作业要求参见:https:edu.cnblogs.comcampusnenu2018fallhomework2246项目地址:https:git.co ... [详细]
author-avatar
虎妞甜言蜜语说给上_235
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有