TCP通道和共享链路通道

news/2024/5/18 14:41:15 标签: 网络, tcp/ip, udp

推送SDK为了适应不同的场景和需求,对于一些对消息及时性、可靠性、自定义性要求高的应用,如即时通讯、社交、游戏等,可能更倾向于使用TCP通道,对于一些对消息节省流量、耗电量、兼容性要求高的应用,如新闻、天气、股票等,可能更倾向于使用系统通道。当然,也有一些应用会同时使用两种通道,根据不同类型的消息选择合适的通道进行推送。

 

自有TCP通道

自有TCP通道是指推送SDK通过建立一个TCP长连接来与客户端设备通信,从而实现消息的下发和回执。这种通道的优点是可以自定义消息类型和样式,灵活度高,也可以避免Google服务在国内不可用的问题。但是这种通道的缺点是需要客户端和服务器保持一个长连接,会增加客户端的耗电量和流量,而且容易受到手机厂商和清理程序的限制,导致长连接不稳定,影响消息的到达率。

推送SDK自有TCP通道是自定义的一套基于UDP的更为简单的二进制网络通信协议。为什么会考虑使用UDP协议呢?有以下几个原因:

  • 推送SDK为广大开发者提供稳定、实时的推送服务,需要能够承受极大的网络负担压力,会连接大量的客户端,并且要积极保障可快速响应;

  • 对于推送服务来说消息内容却更多是短消息内容,并非短文,大多类似于短信长度的提醒、通知、营销内容,可以控制在UDP数据包长度内,不需要进行分包处理;

  • 对于PUSH 来说,对数据的到达顺序性要求比较低,不像IM这种交互需要保障消息的顺序。

推送SDK依靠心跳的机制来维护客户端、路由器、基站、服务端的关系,以此对抗NAT老化问题,以确保UDP链接的套接字保活。NAT老化问题是指由于IP资源的有限以及路由器端口数量有限导致路由器会定期清理不活跃的连接记录。推送SDK的心跳包体只有一个字节长度,能够很大的节省Client的流量,而且对于心跳时间也可以调整。根据不同网络环境和设备状态,推送SDK会动态调整心跳间隔,从而达到最佳的推送效果。

共享链路通道

共享链路通道是指一些手机厂商提供的推送服务,如iOS的APNs,Android的FCM等。共享链路通道的优势是可以利用系统级别的权限和资源,保证推送消息的高效到达和低耗电。

推送SDK可以自动适配不同厂商的通道,实现多通道的智能推送。为什么需要对接厂商通道呢?其实这个也是和APP的保活有及大的关系。一般的保活方式包括:利用系统Service机制、设置进程优先级,降低被系统 kill 的概率。有以下几种方法:

  • 利用前台服务提高进程优先级。前台服务是指在通知栏显示一个常驻的通知,让用户感知到服务的存在,从而提高进程的优先级,使其不容易被系统杀死。但是这种方法会占用通知栏的空间,影响用户体验,而且在Android 8.0以上需要创建一个NotificationChannel,否则会报错。

  • 利用系统广播唤醒进程。系统广播是指在发生特定系统事件时,系统会发出广播,通过在 AndroidManifest 中静态注册对应的广播监听器,即可在发生响应事件时唤醒进程。但是从android 7.0开始,对广播进行了限制,而且在8.0更加严格,只有少数几个广播可以静态注册。

  • 利用双进程守护提高进程存活率。双进程守护是指创建两个服务分别运行在不同的进程中,通过AIDL进行跨进程通信,当一个服务被杀死时,另一个服务会重新启动它。这种方法可以有效地防止单个进程被杀死,但是如果系统同时杀死两个进程,就无法保活了。


http://www.niftyadmin.cn/n/311102.html

相关文章

有没有免费的云渲染平台?

有没有免费的云渲染平台?相信很多人在找云渲染平台的时候都会先网上查找下有没有免费的平台可以使用,而且也确实看到很多云渲染平台写着“免费渲染”,所以这免费是真的免费还是只是一个噱头呢?下面,由前沿的 云渲染平台…

基于Android的运动跑步社交平台app

需求信息: 一.管理员的功能需求: 1、用户信息:管理用户的注册信息; 2、社区分享:对用户发布的信息进行维护; 二.Android客户端的功能需求: 1、注册登录:通过注册的信息进行登录 2、计步信息:用户…

景区剧本杀开发方案

景区剧本杀软件发展趋势包括以下几个方面: 个性化定制:随着用户需求的不断增加,景区剧本杀软件将更加注重个性化定制,满足不同用户的需求。 跨平台支持:景区剧本杀软件将逐渐实现跨平台支持,比如在…

Linux网络——Shell编程之快捷命令

Linux网络——Shell编程之快捷命令 一、快捷排序 — sort 命令二、快捷去重 — uniq 命令三、快捷替换 — tr 命令四、快速裁剪 — cut 命令五、文件拆分 — split 命令六、文件合并 —paste 命令七、变量扫描器 — eval 命令 一、快捷排序 — sort 命令 sort命令用于以行为单位…

软考A计划-重点考点-专题九(数据结构知识)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

web前端入门-HTML

目录 前言 网页的主要组成部分 HTML与CSS 什么是HTML, 什么是CSS HTML快速入门 HTML中的标签特点 图像标签img 常见属性: h标签 水平分页线标签 CSS引入方式 CSS选择器 元素选择器 id选择器 类选择器 超链接 前言 所谓的web开发就是值我们在网页上看…

内存泄漏和内存溢出--原因和解决方法

一,内存泄漏 内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出 二,内存溢出 内存溢出 out of memory :指程序申请内存时&…

Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

生产环境服务器规划如下 服务器类型网络环境cal.comnginx外网192.168.7.15:9200tomcat内网192.168.7.16:9200tomcat内网sdd.comnginx内网192.168.7.15:9100tomcat内网192.168.7.16:9100tomcat内网 192.168.7.15和192.168.7.16是做个负载均衡。目前的需求是用户访问外网的cal.…