客户端client 突然断电了,那么服务器如何快速的知道呢

2023-11-04

(1)使用定时器(适合有数据流动的情况)。
(2)使用socket选项SO_KEEPALIVE(适合没有数据流动的情况)。

        心跳包技术:心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。

心跳包的发送,通常有两种技术:

       

方法1:应用层自己实现的心跳包。   

        由应用程序自己发送心跳包来检测连接是否正常。
        大致的方法是:服务器端在一个 定时事件中 定时向客户端发送一个短小的数据包,然后启动一个线程,在该线程当中不断检测客户端的ACK应答包。如果在定时时间内收到了客户端的ACK应答包,说明客户端与服务器端的TCP连接仍然是可用的。但是,如果定时器已经超时、而服务器仍然没有收到客户端的ACK应答包,即可以认为客户端已经断开。同样道理,如果客户端在一定时间内没有收到服务器的心跳包,则也会认为改TCP连接不可用了。

       注释:原作者理解有误,心跳包应该由客户端在一个定时事件中定时向客户端发送一个短小的数据包,如果服务端收到客户端的心跳包或正常报文,则服务端的计数器归零;服务端启动一个定时器定时累加计数器,当计数器的累加值超过一定值时,则认为客户端断开。

方法2:TCP协议的KeepAlive保活机制。   

        因为要考虑到一个服务器通常会连接很多个客户端,因此,由用户在应用层自己实现心跳包,代码较多而且稍显复杂。
而利用TCP/IP协议层的内置的KeepAlive功能来实现心跳功能则简单得多。不论是服务器端还是客户端,只要一端开启KeepAlive功能后,就会自动的在规定时间内向对端发送心跳包, 而另一端在收到心跳包后就会自动回复,以告诉对端主机我仍然在线。
        因为开启KeepAlive功能需要消耗额外的宽带和流量,所以TCP协议层默认是不开启KeepAlive功能的。尽管这微不足道,但是在按流量计费的环境下增加了费用,另一方面,KeepAlive设置不合理的话有可能会 因为短暂的网络波动而断开健康的TCP连接。并且,默认的KeepAlive超时需要即2小时,探测次数为5次。对于很多服务端应用程序来说,2小时的空闲时间太长。因此,我们需要手工开启KeepAlive功能并设置合理的KeepAlive参数。

 

————————————————

版权声明:本文为CSDN博主「会飞的猪宝宝啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/swty3356667/article/details/84332472

https://blog.csdn.net/swty3356667/article/details/84332472?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

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

客户端client 突然断电了,那么服务器如何快速的知道呢 的相关文章

  • opencv4(五) VideoCapture获取摄像头图像

    环境 ubuntu18 04 opencv4 4 0 摄像头 usb摄像头 挺老的摄像头 还是usb2 0的 csi摄像头也支持这种方法 插入摄像头后 ls dev可以看到 dev video0 video后面的数字就是后面需要的设备id
  • IDEA 之解决快捷键突然失效问题

    刚开机打开IDEA所有快捷键是可用的 但是发现打开很多软件后 IDEA中有些快捷键会失效 原因 IDEA的快捷键和其中一个软件的快捷键冲突 解决方案一 找到和IDEA快捷键冲突的软件 在软件中取消和IDEA冲突的快捷键 但是很多情况下根本找
  • springboot:员工管理系统-修改与删除

    修改员工数据 编辑和删除都需要根据员工的id来进行 步骤 我们需要一个按钮跳转到编辑页面 从而进行修改功能 a class btn btn sm btn primary 编辑 a 对应的controller 去员工的修改页面 GetMapp
  • 继承的笔记

    继承 对象代表什么 就得封装对应的数据 并提供数据对应的行为 对于两种不同的类 但是具有很多共同的属性的时候我们就想着用继承 我们可以将共同的属性放置在一个类中 然后 只需要新建两个类 继承共有的类 然后单独写自己的属性特点 继承类 Jav
  • C++ 符号常量

    一 const限定符 使用const关键字来创建符号常量 常量被创建后其值就固定了 编译器将不允许修改该常量的值 const int a 20 注意 应在声明时对const进行初始化 如果在声明常量时没有提供值 则该常量的值将是不确定的 且
  • 第二部分__建模应用篇__第十一章__时间序列分析

    这一部分是时间序列 计量经济学的大头 下面两个库很重要 statsmodel http www statsmodels org stable index html arch https github com bashtage arch AR

随机推荐

  • JQuery版本使用建议

    目前jQuery有三个大版本 1 x x 兼容ie6 7 8 使用最为广泛 官网只做BUG维护 功能不再新增 因此一般项目来说 使用1 X版本就可以了 最终版本 1 12 4 2016年5月20日 2 x x 不兼容ie6 7 8 很少有人
  • Python3.8 Numpy包 pip指令安装失败、提示超时的解决办法

    每次下东西必折腾半天 这次又遇到了新问题 Python3 8下载Numpy包以及各种包都出错 1 问题描述 在cmd命令提示符窗口调用 pip install package 下载十多分钟后进度条卡住 然后提示超时 尝试添加参数 defau
  • cglib动态代理实现原理详细分析

    在之前Java代理模式中大致的分析了下代理模式的类型及对每种代理类型简单的举例了下 在上篇JDK动态代理实现原理详细分析中 对其JDK代理的流程做了一个详细的分析 而本文 将介绍另一种动态代理模式 cglib动态代理 阅读完本文 你将对cg
  • IDEA 总是提示登录github,登陆后不能push的解决办法

    运行环境 IDEA版本 2020 2 3 Windows 10 git 版本 2 29 2 问题描述 每次push到github时都提示登录 如下图 然而 用命令行push是成功的 此方法适用的前提是能从命令行登录 IDEA的File Se
  • 1. XAML简单的划分区域

    1 运行效果 2 XAML程序
  • QT信号与槽的特点和用法

    1 概念 信号 Signal 就是在特定情况下被发射的事件 例如 PushButton 最常见的信号就是鼠标单 击时发射的 clicked 信号 槽 Slot 就是对信号响应的函数 槽就是一个函数 与一般的 C 函数是一样的 可以定义在类的
  • nested exception is org.apache.ibatis.binding.BindingException

    nested exception is org apache ibatis binding BindingException Parameter roleIdList not found Available parameters are 0
  • Date转换成LocalDateTime类型

    1 先new 一个当前时间 2 获取instant和zoneId 3 将instant和zoneId塞进LocalDateTime ofInstant这个方法里面 4大功告成 我也是今天碰到记录一下 省的以后在找
  • 生信学习——基于R的可视化习题30个(附详细答案解读)

    题目目录 一 基础绘图 1 对RNAseq expr的每一列绘制boxplot图 2 对RNAseq expr的每一列绘制density图 3 对RNAseq expr的每一列绘制条形图 4 对RNAseq expr的每一列取log2后重新
  • Qt串口调试助手

    串口通信因为其协议简单 应用灵活 被广泛使用 Qt自带了串口通信模块QtSerialPort 功能齐全 使用起来非常方便 QtSerialPort模块中有2个类使用的最多 分别是QSerialPort类和QSerialPortInfo类 Q
  • selenium-server-standalone.jar无法启动

    java jar selenium server standalone 2 48 0 jar htmlSuite firefox http localhost 8080 F selenium selenium 2 41 0 login su
  • idea默认文件类型关联

    idea在文件创建的时候没有指定后缀或关联成文本 解决 Editor gt File Types gt Text
  • 【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.64】即插即用新的注意力机制RFAConv

    前言 作为当前先进的深度学习目标检测算法YOLOv8 已经集合了大量的trick 但是还是有提高和改进的空间 针对具体应用场景下的检测难点 可以不同的改进方法 此后的系列文章 将重点对YOLOv8的如何改进进行详细的介绍 目的是为了给那些搞
  • [译] LLVM IR中间码指令集

    最近在研究这个东西 实在百度不到 最后在谷歌上找到英文手册 英文手册地址 https llvm org docs LangRef html 先说点废话 国内的IT水平离世界顶级水平差距实在有点大 个人感觉 有些因素导致这个结果 1 化身广告
  • 控制工程学习2

    前言 此文为个人学习笔记 所学习的视频链接 1 https www bilibili com video BV1hV411v7KB p 29 share source copy web 2 https www bilibili com vi
  • 快速实现Lora通信(一对多)详解

    TOC 一 Lora介绍 Lora不是一种协议 而是一种基于扩频通信的射频技术 它相对于其他射频技术比如2 4G或普通433 915M来讲 具有更远的传输距离 几千米 和更强的越障性能 所以我们把一个Lora设备作为中心点 多个Lora设备
  • https://www.cnblogs.com/wenwenli/p/8301975.html

    https www cnblogs com wenwenli p 8301975 html 单线程 单进程 非阻塞 事件驱动 句柄就是函数 事件驱动模型 事件源 触发事件 监听事件程序 事件处理程序 路径的要求不严格 node的知识点 1
  • 使用 WSL 在 Windows 上安装 Linux 编程

    使用 WSL 在 Windows 上安装 Linux 编程 近年来 随着开源软件的盛行和跨平台开发的需求不断增长 Windows Subsystem for Linux WSL 成为了一个备受瞩目的工具 WSL 允许我们在 Windows
  • pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)

    目录 1 设置中文 2 设置背景图片 3 字体大小 颜色的修改 这个是我的pycharm编译器的样子 好看吧 pycharm在安装之后默认是英语的 有些小伙伴的英语不太会 看英文会比较吃力 这里我来教大家怎么去设置中文 以及字体颜色大小 背
  • 客户端client 突然断电了,那么服务器如何快速的知道呢

    1 使用定时器 适合有数据流动的情况 2 使用socket选项SO KEEPALIVE 适合没有数据流动的情况 心跳包技术 心跳包之所以叫心跳包是因为 它像心跳一样每隔固定时间发一次 以此来告诉服务器 这个客户端还活着 事实上这是为了保持长