Android推送总结

2023-11-16

http://blog.csdn.net/baidu_26352053/article/details/54135107

  最近Android开发当中推送技术是热点。互联网上不同的博客关于推送的介绍也非常的多,大致上关于推送技术,我们可以有使用第三方平台和自己建立推送平台两种方案可行。

        第一种使用第三方推送平台,其中国内做的比较早,而且比较活跃的就是“极光推送”,在此期间也下载过其SDK,做过一些简单的推送Demo,其推送的效果还可以。在反编译其jar包之后,发现其底层的Socket通信层使用了JNI方式实现,这种方式可能是为了保护其关键代码的实现,也有可能是为了安全,但是使用这种方式的效率还有待研究。

        第二个第三方推送平台就是最近才推出的百度推送。因为百度推送的推出,当初还为之高兴一番,因为毕竟程序员有福了(博主不太看好小公司的产品,尤其是国内的小公司,一方面是技术层面,另外一方面是平台更新跟不上等等原因),自己的应用可以用上一个大公司推出的技术,根据其文章的介绍,博主兴奋的下载了SDK,安装了Demo,小心翼翼的点下了“发布”的按钮,十分钟过去了,消息没到客户端,再次检查应用,重新部署,二十分钟过去了,还是没有收到消息,最终我失望了,不知道是程序没写好,还是百度推送的问题,不过在多次发送之后,只有几条是成功的不知原因何在。为了更好的研究推送技术,研究IM,反编译了jar文件,百度的推送客户端完全使用Java编写,没有使用JNI,同时,百度的推送可以做到在安装程序中有一个已经使用了百度推送,那么这部手机之上的多个应用共享这个推送服务即单一终端多个应用共享一个服务进程和一条TCP长连接。另外百度推送号称实现了业界最小的心跳包,由于反编译的jar包无法看到其内容,也就无法判断其发送的内容。


        第二种方式就是自己建立推送服务器,自己编写编写客户端,但是鉴于1.Safe(安全) 2. Stable(稳定) 3.Save(省电省流量省成本) 4.Slim(体积小)这几个要素,尤其是服务端稳定性,因为使用长连接方案,对服务器的开销和要求很大,推送方案对服务器开发要求很高,海量线程连接下的服务器稳定性是非常具有挑战性的,因此这种方案在小规模应用是可以的,但是如果是大规模应用,建议使用第三方应用。这种方式有两种方案,一种是使用XMPP协议,另外一种就是使用MQTT协议。

        方案1、使用XMPP协议(Openfire + Spark + Smack)
        简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
        优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
        缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

        XMPP协议是一种IM协议,其主要面向的是即时聊天,XMPP 获得 Jabber、苹果、惠普、Oracle、Google 和法国电信等的支持,GTalk 就是符合 XMPP 规范的即时通讯软件之一。XMPP协议的一种Java实现就是Smack,其联通了Server和Client,在Android开发领域Smack的一种实现就是aSmack,同时有基于aSmack的Android开源XMPP客户端Beem。


        XMPP作为一种IM协议,拿来做推送可以实现,但是由于其IM原先IM协议的缘故,需要做些改动,改变其冗余的XML,以达到节省电量和流量的作用,同时有AndroidPn这一开源的实现可以参考。其实现Smack的源码org.jivesoftware.smack包下的内容还是有必要一读的。

        方案2、使用MQTT协议
        简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
        优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件rsmb。
        缺点:不够成熟、实现较复杂、服务端组件 rsmb 不开源,部署硬件成本较高。

        MQTT是IBM推出的一种发布/订阅”模式的消息传输协议,其原本是用于传感器和服务器之间的通信,在协议发布出来之后,因为开源的原因,有很多版本的实现,具体看其官网,其中客户端和服务器端都有非常多的版本,服务器端Moquette的实现仅不到10M。但是其服务器端支持的连接数量有限,大约有个五万连接数的限制。但是其比XMPP协议更加的灵活,更省电省流量,心跳包仅仅一个byte+几个byte的头部。小规模企业应用可以使用,博主在做的一个企业应用就是使用这种方案,但是大规模应用需要考虑第三方推送。

        总结:目前推送普遍使用Socket长连接实现,在Android客户端使用AlarmManager定时发送心跳包以维持长连接的连通性,同时其不是IM协议,发送的数据包格式并不是很多,但是在大规模客户端连接时,对服务器开发要求很高,海量线程连接下的服务器稳定性是非常具有挑战性的,可以考虑采用nginx/Node.js方案做服务器端。

        本文纯属对不久之前对IM协议和推送服务学习的一次总结,如有不足之处,还望包涵。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android推送总结 的相关文章

  • web信息收集----网站指纹识别

    文章目录 一 网站指纹 web指纹 二 CMS简介 三 指纹识别方法 3 1 在线网站识别 3 2 工具识别 3 3 手动识别 3 4 Wappalyzer插件识别 一 网站指纹 web指纹 Web指纹定义 Web指纹是一种对目标网站的识别
  • Stata改变变量label

    我们用dta格式数据时 label栏可能是无法识别的字符 其中一个原因是我们电脑安装的是简体中文版 但数据原来的label是繁体字 只要用 label var命令就可以更改了 具体用法 label var 变量名称 变量新label 如下所
  • 好像还挺好玩的GAN8——SRGAN实现图像的分辨率提升

    好像还挺好玩的GAN8 SRGAN实现图像的分辨率提升 注意事项 学习前言 什么是SRGAN 代码与训练数据的下载 神经网络组成 1 生成网络 2 判别网络 训练思路 1 对判别模型进行训练 2 对生成模型进行训练 全部代码 1 data
  • JS+CSS实现一个文字跟随屏幕滑动渐入渐出效果

    效果展示 可以看到文字随着屏幕滑动条的滚动逐渐渐入渐出 接下来看看我是怎么实现的把 实现原理 要实现这个效果也很简单 就是利用background image属性的linear gradient给文字加上渐变背景 然后设置backgroun
  • npm、yarn、pnpm如何清除缓存?

    前端工程化创建项目会经常使用各种安装包管理工具 安装各种前端依赖包 例如 npm yarn pnpm等 时间一长 各种安装包管理工具的在安装依赖时 留下的缓存文件就会变得很大 以至于影响系统的运行 因此必要时清除缓存就是一个不错的选择 本文
  • 磁盘调度算法(FCFS、SSTF)例题

    一 原理 先来先服务 FCFS first come first service 根据进程请求访问磁盘的先后次序进行调度 最短寻道时间优先 SSTF Shortest Seek Time First 选择访问的磁道与当前磁头所在的磁道距离最
  • 下列不是HTML网页开发工具的是,网页开发工具有哪些

    越来越多的移动端和桌面端应用开始使用HTML CSS和JS来开发了 而网页设计更是离不开这些语言所需要的工具 下面由小编为大家整理的网页开发工具 希望大家喜欢 网页开发工具 1 Prepo Prepo 是一款同时登录Mac和iOS平台的应用
  • 变分推断

    变分推断是近年来深度学习中一个非常重要的技术手段 推断困难通常是指难以计算p h v 或其期望 其中v指的是模型的可观测变量 而h表示隐藏变量 在深度神经网络中 多层的隐藏变量之间联系复杂 无法通过一个具体地概率密度函数来刻画隐藏变量的实际
  • 微信小程序wx.getUserProfile的用法

    接触了以前开发的一个微信小程序 发现wx getUserInfo这个官方接口不能获取用户的信息 我重新创建了一个新的项目 发现可以用wx getUserProfile这个官方接口来获取用户信息 具体操作如下 1 首先在xxxx jslim里
  • transformer的学习记录【完整代码+详细注释】(系列二)

    文章目录 1 编码器部分实现 1 1 掩码张量 1 1 1 用 np triu 生产上三角矩阵 1 1 2 生成掩码张量的代码 1 1 3 掩码张量可视化展示 1 1 4 掩码张量学习总结 1 2 注意力机制 1 2 1 注意力机制 vs
  • QT6.4制作动态组织架构图

    最近项目需要用QT开发组织架构图 本来先网上找个demo拿来即用 但是找了一圈 要么不能编译 要么运行崩溃 要么很粗糙什么细节都没做 离实际应用差距甚远 于是我自己重新编写调试 耗费几天时间 在Window10 X64上运行 五层级别 右键

随机推荐

  • Java TreeMap 源码解析

    Java TreeMap 源码解析 继上篇文章介绍完了HashMap 这篇文章开始介绍Map系列另一个比较重要的类TreeMap 大家也许能感觉到 网络上介绍HashMap的文章比较多 但是介绍TreeMap反而不那么多 这里面是有原因 一
  • 网络安全应急响应----4、DDoS攻击应急响应

    文章目录 一 DDoS攻击简介 二 DDoS攻击方法 1 消耗网络带宽资源 1 1 ICMP Flood ICMP洪水攻击 1 2 UDP Flood UDP洪水攻击 2 消耗系统资源 2 1 TCP Flood 2 2 SYN Flood
  • PoDoFo实现本地PDF加载

    PdfMemDocument类 未完成 继承 PdfDocument 友元 PdfWriter 构造函数 PdfMemDocument 构造空对象 PdfMemDocument bool bOnlyTrailer 构造对象 bOnlyTra
  • 若依前后端分离部署(二级域名+反向代理+负载均衡)

    前言 最近使用若依前后端进行二次开发 在部署时遇到了一些问题 在此记录一些经验 仅记录学习和供参考 如果错误请指正 谢谢 问题描述 由于服务器使用Nginx转发域名请求 无法使用根目录 于是在前端加入了二级目录 修改部分如下图 这里是前端入
  • 【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

    目录 一 初始化列表 初始化列表概念 初始化列表的优点 使用场景 explicit关键字 二 Static成员 Static成员概念 静态数据成员 静态函数成员 使用静态成员的优点 使用静态成员的注意事项 三 友元 友元的概念 类友元 函数
  • vue2 img加载失败时给默认图片

  • python中的分页封装

    utils文件夹下面的pagination 自定义分页组件 import math from django utils safestring import mark safe class Pagination object def init
  • 《看完就懂系列》谈谈数据埋点的原理与实现

    这是大冰块2021年第7篇原创文章 和大冰块一起在前端领域努力吧 写在前面 之前公司接了个做广告的业务 甲方财大气粗 沟通也特别顺利 刚开始的时候 大家都摩拳擦掌兴致满满 觉得这个项目奖金一定会翻一番 于是第一版赶得很急 上线之后 点击率与
  • 高并发平台技术栈大起底

    技术栈 technology stack 就是一个公司的透视镜 从某些程度上可以展示出公司的技术实力 从技术桟也可以看出整个平台的技术要素 平台大小规模等 今天来给大家分享我司的技术全家桶 总览 闲来无事就想着还可以总结总结什么 平台架构
  • 时序分析基本概念介绍——时钟sdc

    上次介绍了sdc的基本概念 那接下来几期 我们来讲解一些比较常用的sdc命令 虽然sdc大大小小有上百条命令 但实际常用的其实就那么10几条 今天我们来介绍下与时钟相关的命令 主要有以下命令 create clock create gene
  • Zlib的安装与测试

    官方网址 http www zlib net 进入官网看到 如图所示 最新版本为zlib 1 2 11 然后你用wget http www zlib net zlib 1 2 11或者wget http www zlib net zlib
  • NGINX监听不同端口的配置

    server listen 81 监听的端口 server name localhost 监听的域名 location message 当当问这个路径时实际上会去访问下面这个地址 proxy pass http localhost xxx
  • 【计算机视觉40例】案例14:指纹识别

    导读 本文是专栏 计算机视觉40例简介 的第14个案例 指纹识别 该专栏简要介绍李立宗主编 计算机视觉40例 从入门到深度学习 OpenCV Python 一书的40个案例 目前 该书已经在电子工业出版社出版 大家可以在京东 淘宝 当当等平
  • 谈谈互联网免费思维

    大家好 我是测试小牛 一位平凡又普通的95后互联网博主 今天跟大家聊下互联网的免费思维 在移动互联网时代的今天 可能任何一家互联网创业公司的崛起都具备这种思维 比如当年快滴跟滴滴之争 美团跟饿了么之争 非但不收钱 还花钱大量补贴用户 去使用
  • [思考进阶]05 人与人之间的差距,在于“自律”

    除了要提升自己的技术能力 思维的学习和成长也非常非常重要 特推出此 思考进阶 系列 进行刻意练习 从而提升自己的认知 我认识两个成功的长者 其中有一个人 每天记录当天的重要事项 比如今天和谁签了什么合同 房子装修还差什么材料 女儿20岁生日
  • 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯

    文章目录 0 前言 1 什么是爬虫 2 什么东西可以爬 3 简易爬虫示例 4 如何筛选数据 5 正则表达式 6 最终代码 如何修改代码 以适应自己的需求 效果截图 7 彩蛋 本人与知乎用户间宫羽咲sama是同一人 内容同步更新在CSDN和知
  • 1.通用文件模型及VFS结构-基础

    一 reiserFS 新型文件系统 特点 1 采用完全平衡树来容纳数据 ReiserFS是基于平衡树 STree 的文件系统结构 尤其对于大量文件的巨型文件系统 如服务器上的文件系统 搜索速度要比ext2快 ext2使用局部的二分查找法 综
  • 客户服务器被 ddos 攻击,应该怎么办?

    转自 点击打开链接https www v2ex com t 145842 首页 注册 登录 V2EX way to explore V2EX 是一个关于分享和探索的地方 现在注册 已注册用户请 登录 V2EX 提问指南 广告
  • plSQL中修改代码字体的大小

    在第一次打开PLSQL时 大部分人看代码字体的大小肯定不习惯 这时候只需要修改一下字体的大小即可 首先找到左上角的 工具 然后点击第一个首选项 然后再用户界面找到 字体 最后点击编译器中的 选择 即可 然后就可以进行字体大小的调节了
  • Android推送总结

    http blog csdn net baidu 26352053 article details 54135107 最近Android开发当中推送技术是热点 互联网上不同的博客关于推送的介绍也非常的多 大致上关于推送技术 我们可以有使用第