APP推送系统工作原理

APP推送系统工作原理一、传统APP架构下的信息传送APP主动向服务器请求数据,服务器被动的提供数据。步骤如下:然而,如果此时服务器又有了新的新闻,在用户没有主动刷新的情况下,服务器是不会主动推送给用户的。推送解决了这个困境,它让服务器主动连接APP,通知APP有了新的新闻,可以再请求。收到推送的APP(即使已关闭)又去服务器请求最新的新闻,用户就能看到了。二、实现推送的方法实现一个推送系统需要服务器端和…

大家好,又见面了,我是你们的朋友全栈君。

一、传统APP架构下的信息传送

APP主动向服务器请求数据,服务器被动的提供数据。

步骤如下:
在这里插入图片描述

然而,如果此时服务器又有了新的新闻,在用户没有主动刷新的情况下,服务器是不会主动推送给用户的。
推送解决了这个困境,它让服务器主动连接APP,通知APP有了新的新闻,可以再请求。收到推送的APP(即使已关闭)又去服务器请求最新的新闻,用户就能看到了。
二、实现推送的方法
实现一个推送系统需要服务器端和终端的配合。
方法一:轮询
即不停地向服务器发送请求(既然不知道什么时候会发生,那就一遍一遍的问吧)。
缺点:手机消耗电量、流量大;服务器也要处理大量的请求,压力大。

方法二:APP和服务器建立长时间连接通道
通过这个通道,APP可以向服务器请求数据,服务器也可以向APP发送数据。
android系统中,如果APP被关闭,APP可以启动一个后台服务来维持通道继续运行。(ios的解决方法见下)
如何维护这个长时间连接的通道?
APP会每隔段时间向服务器报告自己还活着,服务器收到后,即可知道这个通道可以继续使用。(代价是增加电量消耗)
如果手机中装了多个带有推送功能的APP,如何解决多个通道的问题?
android解决方案:GCM(系统提供)、开发各自的专用通道(国内方法)
Android系统提供的 GCM 只能在 Android2.2 以上才能使用,3.0 以下必须要安装 Googleplay 并登陆了 Google 账号才能支持。而国内发行的手机大多是阉割掉了 google 服务的。
因此,对于 Android 系统来说,各家 app 只能开发自己的专用长连接通道了。然而这时候他们遇到了 app 的天敌:管家和卫士们。前文说了,app 想要及时收到服务器推送的消息,关键在于自己与服务器的长连接通道不被关闭,也就是自己的后台服务可以一直在后台运行,而管家和卫士们的一键清理功能就是专治这种 “毒瘤” 的。道高一尺魔高一丈,app 在与管家和斗士们的长期斗争中,总结了一系列躲避被清理掉的方法,什么定时自启能力、什么相互唤醒、什么前台进程等等。
IOS解决方案:APNS
ios开通了一条系统级别的长连接通道,通道的一端是手机的所有APP,另一端是苹果的服务器。
APP的服务器如果有消息需要推送,先把消息发送到苹果服务器上,再利用苹果的服务器通过长连接通道发送到用户手机,最后通知具体的APP。这样,即使安装了100款APP,也只需要向一条通道里发送推送。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137324.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • shell脚本编程基础

    shell脚本编程基础

    2021年5月29日
    117
  • jquery tmpl 详解「建议收藏」

    jquery tmpl 详解「建议收藏」转自:http://www.cnblogs.com/zhuzhiyuan/p/3510175.html动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML

    2022年6月29日
    26
  • C++中this指针的理解和用法

    C++中this指针的理解和用法关于this指针的一个精典回答:当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。 个人理解:(ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了)

    2022年5月16日
    33
  • python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)[通俗易懂]

    python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)[通俗易懂]最近我参加了一个人工智能与自然语言处理的课程,这是第一周的学习笔记。这份笔记不涉及一般知识,全部都是与实践(我在这门课上的作业)有关的总结。文章目录理论学习人工智能的五种模型:作业1.RuleBased基于规则的模型2.ProbabilityBased基于概率的模型理论学习人工智能的五种模型:RuleBased基于规则的模型ProbabilityBased基于概率的模型Sear…

    2022年5月24日
    34
  • 视觉slam与激光slam_适马fpl 视频

    视觉slam与激光slam_适马fpl 视频SLAM(同步定位与地图构建),是指运动物体根据传感器的信息,一边计算自身位置,一边构建环境地图的过程,解决机器人等在未知环境下运动时的定位与地图构建问题。目前,SLAM的主要应用于机器人、无人机、无人驾驶、AR、VR等领域。其用途包括传感器自身的定位,以及后续的路径规划、运动性能、场景理解。SLAM按照传感器来分,分为视觉SLAM(VSLAM)和激光SLAM,视觉SLAM基于摄像

    2022年8月23日
    3
  • 配置pycharm+anaconda环境「建议收藏」

    配置pycharm+anaconda环境「建议收藏」虽然这方面已经很熟悉了,但每次重装系统重新配置环境时都要重新找帖子看,浪费很多时间,所以还是想记录下来。第一步,安装pycharm。打开pycharm的官网https://www.jetbrains.com/这里是第一个注意的点,点击下载community版本,因为专业版要激活成功教程的非常麻烦,其实社区community版本就够用了。点击下载,350m左右。下载完双击安装一路默认到安装完成就行,安装路径可以根据自己需要调整。第二步、安装anaconda打开anaconda的官网h

    2022年8月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号