首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高效保活长连接:手把手教你实现自适应的心跳保活机制

NAT超时 网络状态发生变化 其他不可抗因素(网络状态差、DHCP的租期等等 ) 下面,我将对每种原因进行分析 原因1:进程被杀死 当进程被杀死后,长连接也会随之断开 原因2:NAT 超时(重点关注)...原因3:网络状态发生变化 当移动客户端网络状态发生变化时(移动网络 & Wifi切换、断开、重连),也会使长连接断开 原因4:其他不可抗因素 网络状态差、DHCP的租期到期等等,都会使得长连接发生...答:不断增加心跳间隔时间进行心跳应答测试,直到心跳失败5次,即可找出最接近 当前NAT 超时时间的心跳间隔时间。...答:当前发送心跳包成功 的最大间隔时间(即最接近NAT超时时间的心跳间隔) 发送失败5次,则判断当前网络环境的NAT 超时时间 发生了变化。...具体请看下图: 注:在检测到 NAT 超时时间 发生变化,重新自适应计算心跳间隔 从而使得心跳间隔 接近 NAT 超时时间 总结:统筹2个核心问题,总结出自适应心跳间隔时间 设计方案为下图 7.3

1.9K32
您找到你想要的搜索结果了吗?
是的
没有找到

谈谈长连接和心跳保活机制

1.长连接介绍 通信双方进行TCP链接后进行通信,结束不主动关闭链接 优点:通信速度快,免去了DNS解析时间,以及三次握手四次分手的时间,避免短时间内重复连接所造成的信道资源 & 网络资源的浪费 2....长连接断开的原因 长连接所在进程被杀死 NAT超时 网络状态发生变化,移动网络 & Wifi切换、断开、重连 其他不可抗因素(网络状态差、DHCP的租期等等 ) NAT简介 IP可以分为公网ip和私网...3.高效维持长连接方案 进程保活(防止进程被杀死) 心跳保活(阻止NAT老化) 断线重连(断网以后重新连接网络) 3.1 进程保活 ?...自适应心跳间隔时间.jpg 该方案需要解决的有2个核心问题 (1)如何自适应计算心跳间隔 从而使得心跳间隔 接近 当前NAT 超时时间 不断增加心跳间隔时间进行心跳应答测试,直到心跳失败5次,即可找出最接近...当前NAT 超时时间的心跳间隔时间 (2)如何检测 当前网络环境的NAT 超时时间 发生了变化 当前发送心跳包成功 的最大间隔时间(即最接近NAT超时时间的心跳间隔) 发送失败5次 4.3 (3)

2.9K20

浅析CTF中的Node.js原型链污染

社区https://www.freebuf.com/articles/web/361333.html 前言 Node.js之前并未有太多了解,最近遇上了一些相关题目,发现原型链污染是其一个常考点,在学习对其进行了简单总结...,希望对正在学习的师傅有所帮助 Node.js 原型链污染 首先强推这篇文章https://developer.mozilla.org/,读完就会对原型链有个大致的了解,对后面学习非常有帮助。...__proto__.number=520 操作,即使是内容为空的c,调用number属性仍存在且值为我们设定的520,这时就达到了一个原型链污染的目的。...没看到有什么有用信息,这个时候查看一下源代码看看有没有有用信息 发现提示了eval参数,这个时候我们就需要看一个东西了,即如何在Node.js执行命令 http://nodejs.cn/api...,那我们这里就可以写成spawnSync('ls',['.']).output,接下来尝试在靶场中执行 eval=require('child_process').spawnSync('ls',['.'

1.8K60

如何分析ANR问题

在明确了这个时间点,才能根据不同ANR的类型分析在超时时间段内系统和应用有什么异常信息。...它是在输出ANR应用堆栈和主要系统服务堆栈、ps、meminfo等信息,ANR进程马上就要被杀死时才被输出的。...分析发现问题出现在kernel中的mmc驱动。 4、 GC时间是否过长:如果GC花费的时间占据了ANR超时时间的一半以上,就需要考虑是由于系统内存极端不足或内存碎片化导致ANR。...小内存设备上由LowMemoryKiller导致的ANR通常有两种,一种是应用刚刚收到一个广播消息就被LMK杀死,消息无人处理导致广播超时发生ANR。...因此分析广播超时ANR时需要注意在超时时间段内应用是否被LMK杀死。针对此问题可以修改AMS,当报出广播超时ANR前首先检查应用是否已经被杀死,如果应用已死就不再报出ANR。

2K30

何在Linux中的特定时间运行命令

我只是想知道在Linux 操作系统中是否有简单的方法可以在特定的时间运行一个命令,并且一旦超时就自动杀死它 —— 因此有了这篇文章。请继续阅读。...假设你只想运行一个命令 5 秒钟,然后杀死它。为此,我们使用: $ timeout 例如,以下命令将在 10 秒终止。...但是,如果你使用 timeout 命令运行它,它将在给定的时间间隔自动终止。如果该命令在超时仍在运行,则可以发送 kill 信号,如下所示。...首先,它会发送警告信号,然后在超时发送 kill 信号。 与 timeout 不同,timelimit 有更多选项。...你可以传递参数数量, killsig、warnsig、killtime、warntime 等。它存在于基于 Debian 的系统的默认仓库中。

4.6K20

Android 进程保活 的两种实现方式

让service.onStartCommand返回START_STICKY,START_STICKY是service被kill掉自动重启 保活100% 通过实验发现,如果在adb shell当中kill...process 可见进程 Visible process 服务进程 Service process 后台进程 Background process 前台进程 Foreground process 如何在程序杀死的清下重启进程...函数功能是:父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁返回...如何在程序杀死的清下重启进程-----socket方式 进程间通信 思路 创建一个子进程作为socket的的服务端 将主进程作为客户端,通过socket进行连接,当主进程被杀死之后,子进程服务端会受到一个主进程被杀的消息...// 清空端口号 FD_ZERO(&rfds); // 设置新的端口号 FD_SET(m_child,&rfds); // 设置超时时间

5.8K20

shell 中给命令设置超时时间

shell 中给命令设置超时时间 在我们写 shell 脚本的时候,有时候想给一个命令设置一个超时时间,当命令执行了多长时间还没有执行完就强制终止;我们可以采用如下方式 timeout 3 sleep...timeout 指令介绍 运行指定的命令,如果在指定时间仍在运行,则杀死该进程。用来控制程序运行的时间。 使用方法 timeout [选项] 数字[后缀] 命令 [参数]......-s, --signal=信号 指定在超时时发送的信号。信号可以是类似"HUP"的信号名或是信号数。...查看"kill -l"以获得信号列表 --help 显示此帮助信息并退出 --version 显示版本信息并退出 如果程序超时则退出状态数为124,...TERM 信号在进程没有捕获此信号时杀死进程。 对于另一些进程可能需要使用KILL (9)信号,当然此信号不能被捕获。

4.4K20

shell 命令设置超时时间

shell 中给命令设置超时时间 在我们写 shell 脚本的时候,有时候想给一个命令设置一个超时时间,当命令执行了多长时间还没有执行完就强制终止;我们可以采用如下方式 timeout 3 sleep...timeout 指令介绍 运行指定的命令,如果在指定时间仍在运行,则杀死该进程。用来控制程序运行的时间。 使用方法 timeout [选项] 数字[后缀] 命令 [参数]......-s, --signal=信号 指定在超时时发送的信号。信号可以是类似"HUP"的信号名或是信号数。...查看"kill -l"以获得信号列表 --help 显示此帮助信息并退出 --version 显示版本信息并退出 如果程序超时则退出状态数为124,...TERM 信号在进程没有捕获此信号时杀死进程。 对于另一些进程可能需要使用KILL (9)信号,当然此信号不能被捕获。

5.9K00

万字长文:手把手教你实现一套高效的IM长连接自适应心跳保活机制

这些断开原因主要是: 1)长连接所在进程被杀死(这主要说的是移动端); 2)NAT超时; 3)网络状态发生变化; 4)其他不可抗因素(网络状态差、DHCP的租期等等 )。...4.2 具体分析 1)原因1:进程被杀死 当进程被杀死后,长连接也会随之断开。...1)如何自适应计算心跳间隔 从而使得心跳间隔 接近 当前NAT 超时时间? 答:不断增加心跳间隔时间进行心跳应答测试,直到心跳失败5次,即可找出最接近 当前NAT 超时时间的心跳间隔时间。...答:当前发送心跳包成功 的最大间隔时间(即最接近NAT超时时间的心跳间隔) 发送失败5次,则判断当前网络环境的NAT 超时时间 发生了变化。...具体请看下图: 注:在检测到 NAT 超时时间 发生变化,重新自适应计算心跳间隔 从而使得心跳间隔 接近 NAT 超时时间 总结一下:统筹以上2个核心问题,总结出自适应心跳间隔时间设计方案为下图:

1.2K31

Android ANR问题解析(一)

另一个常见的修改是在手机启动的4分钟内将超时时间暂时提高到15秒,因为开机MediaServer扫描媒体数据库会消耗大量CPU,这样修改有助以提高Monkey测试时的首错时间。...比如在上述流程中,步骤3中应用B的进程创建完成,但是由于原生Bug导致焦点应用没有转换,超时同样会报出A发生ANR。...由于系统性能原因,CPU占用率高/平均等待队列长/内存碎片化/页错误高/GC慢/用户空间冻结/进程陷入不可打断的睡眠,会造成整体运行慢使ANR频繁发生。...如果一个应用恰好在开始执行OnReceive方法时被LMK杀死,那么在60秒BoardcastQueue检查广播处理情况时此应用就一定会发生ANR。...Service 的各个生命周期函数,OnStart、OnCreate、OnStop也运行在主线程中,当这些函数超过 20 秒钟没有返回就会触发 ANR。

2.3K10

Android消息推送:第三方消息推送平台详细解析

服务会被杀死 由于Android系统的机制,后台推送 Service 会被各种主动的或是被动的行为给杀死,而服务一旦被杀死,意味着就接收不到推送消息。 ---- 3....通知栏消息:该类消息在被送达用户的设备,直接以系统通知栏的形式展示给用户 不会继续被传递到App 透传消息:该类消息在被送达用户的设备,还会继续传递到App 通过回调App的某个BroadcastReceiver...我们来看下小米推送的官方文档描述: 在一些 Android 系统( MIUI)中,受到系统自启动管理设置的限制,应用不能在后台自启动 在这类系统中,如果在发送消息的时候对应的应用没有被启动,透传类消息将不能顺利送达...可自定义通知提醒的样式(包括提示样式、提示形式声音等等) 所以大家可以根据不同的使用场景来对推送消息类别进行选择了。 ---- 6. 总结 相信大家已经非常了解关于第三方推送的相关信息。...接下来,我会继续介绍具体如何在Android应用中集成相应的第三方推送功能(小米推送、极光推送、个推等等),有兴趣可以继续关注Carson_Ho的安卓开发笔记 ----

9.6K60

腾讯云分布式数据库可用性系统实践

2.杀死实例:Agent 发现自己成为网络孤岛,会主动发起请求杀死本机所有CN/DN实例。...主机因为宕机,无法接收容灾指令,因此宕机重启,该主机上的 Agent 认为该 DN 节点角色仍然为 Master DN,此时 Agent 和 Center 发生角色校验失败, 3.杀死实例:角色校验失败...,Agent 会杀死本机所有 CN/DN 节点,以防止主机宕机重启,原 Master DN 和新 Master DN 并存而出现系统脑裂。...故障三:指令超时:Center 向 Agent 发送的指令都是通过网络包进行发送,会出现指令丢失或者指令超时?...超时重试:通过超时重试机制,解决 Agent、Center 网络通信过程中,出现的网络超时的问题。

2.9K00

Fkill –在Linux上搜索并终止进程

Fkill是Fabulous Kill的缩写,它是一个跨平台的命令行实用程序,可一次交互式地搜索和杀死多个进程。...后来我发现,Fkill程序可以找到正在运行的进程,并可根据需要杀死一个或多个进程。它使用Nodejs编写,并且支持Linux、Mac OS和Microsoft Windows。...如何在Linux上安装NodeJS 安装Nodejs,运行以下命令以安装fkill。...使用向上/向下箭头选择一个进程,然后按ENTER键将其杀死。您还可以键入进程名称的前几个字母,然后从列表中选择该进程,然后按Enter以将其杀死。 ? 要退出交互式UI,请按CTRL + c。...如果您已经知道端口号,例如2236,则可以使用以下命令直接将其杀死: $ fkill 2236 您可以通过使用空格分隔端口号来一次杀死多个进程。

2.3K10

android进阶之Watchdog检查系统异常机制

变量mMonitors存放的是对象Monitor的子类,AMS、PMS等。对于这类的监控主要是判断它们是否死锁。...当调用Watchdog.getInstance().start()时,则进入线程“watchdog”的run()方法, 该方法分成两部分: 前半段用于监测是否触发超时 后半段当触发超时时输出各种信息,最后杀死...等待30s, 再调用evaluateCheckerCompletionLocked来评估Checker状态; 根据waitState状态来执行不同的操作: 当COMPLETED或WAITING...因此,AMS判断是否死锁就是去看能不能拿到自己的锁 run()方法后面的实现则是当触发超时时输出各种信息,最后杀死SystemServer进程,此处就不继续贴出源码了。。。。...有两种方式加入Watchdog的监控: addThread():用于监测Handler对象,默认超时时长为60s.这种超时往往是所对应的handler线程消息处理得慢; addMonitor()

1.2K20
领券