TCP通道和共享链路通道

news2024/10/7 12:20:53

推送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.coloradmin.cn/o/513998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件工程】自动化测试保证卓越软件工程能力(3)

测试目标定义 对照目标系统,如下: 给出自动化测试平台目标如下: Case levelCase briefReport send toOVERALLUser 1 -> Process -> Customer 1BossLevel 1User 1 -> Process -> Customer 1 User 1 -> Process -> Custome…

AI自动写文章工具-ai文章智能生成器

随着人工智能技术的快速发展,越来越多的应用开始使用AI自动生成文章的功能,实现全自动、高质量和高效率的文章写作。本文将从全自动批量生成、没有错别字和标准语法、自动插入图片以及严格按照标准格式结构生成几个方面,展开对AI自动生成文章…

数据分析04——Pandas简介/Series对象/DataFrame对象

1、Pandas简介: Pandas是基于NumPy开发的数据分析三大剑客之一,Python数据分析的核心库提供快速、灵活、明确的数据结构Series对象:一维数组结构,由index和value构成DataFrame对象:二维数组结构,由index、…

MySQL基础(二十五)InnoDB数据存储结构

1 数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作…

在外Windows公网远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自远程内网穿透的文章:公网远…

友元函数,友元类,内部类及其之间的关系,匿名对象等

TIPS 当某一个类当中有自定义类型成员变量的时候,然后对该类的实例化对象调用函数的时候走初始化列表的时候,如果说要对自定义类型成员变量进行初始化列表初始化的时候,尽管那个自定义类型它的构造函数是没有参数的,但是此时括号…

数据剖析更灵活、更快捷,火山引擎 DataLeap 动态探查全面升级

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近期,火山引擎 DataLeap 上线“动态探查”能力,为用户提供全局数据视角、完善的抽样策略,提高数据探查的灵活度以及响应速率。 …

【STL模版库】string类:模拟实现string类

一、成员变量 private:char *_str;size_t _size;size_t _capacity;public:static size_t npos -1; //编译报错,不能在类中初始化const static size_t npos -1; //[1]const char* c_str() const{ //[2]return _str;}size_t size() const{return _size;} size_t ca…

智慧水务云平台助力“十四五”水安全保障规划!

一、《“十四五”水安全保障规划》 水利部印发《“十四五”水安全保障规划》,规划中指出,“十四五”期间要抓好8个方面重点任务。 一是实施国家节水行动,强化水资源刚性约束。 二是加强重大水资源工程建设,提高水资源优化配置能…

Mongo执行计划explain分析

3.0+的explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。现实开发中,常用的是executionStats模式。 1.使用方式 在查询语句后面加上explain("executionStats") db.user.find({"roleCodes":"xsbj","status&…

详细操作Selenium自动化测试之中的断言

Selenium常用的断言包括 页面属性断言:断言标题、url或页面源码中是否包含或不包含特定字符元素存在断言:断言指定元素存在图片及链接断言:断言图片正常显示、链接可以正常打开 页面属性断言 这是最常用的断言方式,可以用来断言…

TTL转HDMI 1.4,性能提升,pin to pin 芯片LT8618SXB

1. 描述 LT8618SX 是 Lontium 的低功耗版本 HDMI 发射器,其基于 ClearEdgeTM 技术。它支持 24 位色深 HDMI 1.4(高清多媒体接口)规范。它们与 Lontium 的第一代 HDMI 发射器 LT8618EX 完全向后兼容。 LT8618SX 是一款高性能、低功耗器件…

干货分享!9大Python常用技巧!

介绍 Python 炫酷功能(例如,变量解包,偏函数,枚举可迭代对象等)的文章层出不穷。但是还有很多 Python 的编程小技巧鲜被提及。因此,本文会试着介绍一些其它文章没有提到的小技巧,这些小技巧也是…

csgo搬砖项目,时间自由,项目包下车,包落地

Steam是一款全球较大的综合性数字游戏软件发行平台。steam同时在线飙到3300万!超越你说熟悉的王者,吃鸡!用户多,竞争者少,连我自己都没想到,有一天我居然可以靠着steam游戏搬砖来赚钱养活自己。 实话实说&a…

计算机基础--->数据结构(1)【图的存储和遍历】

文章目录 图图的存储图的搜索(无向无权图)代码演示 图 图中包含 顶点、边、度,无向图,有向图,无权图,带权图,其中 度表示一个顶点包含多少条边,有出度和入度。 图的存储 邻接矩阵 代…

【LeetCode】13,罗马数字转整数。 难度等级:简单。知识点:map和unordered_map的区别

文章目录 一、题目二、初级解法:顺序遍历字符串我的解法(语法平平无奇)语法接近 三、精妙解法:逆序遍历字符串四、知识点:map和unordered_map的区别 LeetCode 第13题,罗马数字转整数;难度等级&a…

大厂视频面试,因为截屏作废

大厂视频面试现在这么严格了么?无意间按到截屏直接显示面试作废,好在最后和HR解释了下,再约时间重新面。 作为一个面试过3、4家大厂,现在在鹅厂工作的过来人来说,上面遇到的这个问题是AI面,不用太担心&…

React项目总结:上一步的终点,下一步的起点

项目简介 本人利用 react18.2 json-server 做了一个后台管理系统。 包含: 用户管理权限管理站内信审核管理站内信发布管理 等内容。 其中涉及到react-router V6.0的使用以及一些权限控制等内容。 更多精彩内容,请微信搜索“前端爱好者“&#xff…

Makefile基础教程(函数的使用)

文章目录 前言一、自定义函数1.使用示例2.注意事项 二、预定义函数1.call函数2.abspath函数 总结 前言 在Makefile中也是存在函数的,在 Makefile 中,可以使用函数调用来处理变量、字符串和路径等操作。那么下面就来看看是如何在makefile中使用函数的吧。…

计算机网络基础(四)—— 什么是TCP/IP协议?是两种网络协议?

文章目录 01 | 🍓 概念 \color{red}{概念} 概念🍓02 | 🍊 T C P / I P 分层模型 \color{orange}{TCP/IP分层模型} TCP/IP分层模型🍊03 | 🍋 数据链路层协议 \color{yellow}{数据链路层协议} 数据链路层协议&#x1f34…