当前位置: 首页 > news >正文

Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)

剖析目的

Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一个服务----心跳机制 heartbeat.通过心跳检査对方是否有效,这是 RPC 框架中是必不可少的功能。下面我们分析一下 Netty 内部心跳服务源码实现。

源码剖析

 Netty 提供了 IdleStateHandler ,ReadTimeoutHandler,WriteTimeoutHandler 三个Handler 检测连接的有效性重点分析 IdleStateHandler

序号

名称

作用

1

IdleStateHandler

当连接的空闲时间(读或者写)太长时,将会触发一个IdleStateEvent 事件。然后,你可以通过你的 ChannellnboundHandler 中重写 userEventTrigged 方法来处理该事件。

2

ReadTimeoutHandler

如果在指定的事件没有发生读事件,就会抛出这个异常,并自动关闭这个连接。你可以在exceptionCaught 方法中处理这个异常。

3

WriteTimeoutHandler

当一个写提作不能在一定的时间内完成时,抛出此异常,并关闭连接,你同样可以在exceptionCaught 方法中处理这个异常。

ReadTimeout 事件和 WriteTimeout 事件都会自动关闭连接,而且,属于异常处理

 

IdleStateHandler 分析

 4 个属性

private final boolean observeOutput, //是否考虑出站时较慢的情况。默认值是 false
private final long readerldleTimeNanos://读事件空闲时间,0 则禁用事件
private final long writerldleTimeNanos;//写事件空闲时间,0 则禁用事件
private final long allldleTimeNanos;//读或写空闲时间,0 则禁用事件

handlerAdded 方法

当该 hander 被添加到 pipeline 中时,则调用 initialize 方法

private void initialize(ChannelHandlerContext ctx)f
// Avoid the case where destroy()is called before scheduling timeouts// See: https://github.com/netty/netty/issues/143
switch(state)f
case 1:
case 2.
return,
state=1:
initOutputChanged(ctx);
lastReadTime =lastWriteTime = ticksInNanos();
if(readerldleTimeNanos >0)f
//这里的 schedule 方法会调用 eventLoop 的 schedule 方法,将定时任务添加进队列中readerldleTimeout = schedule(ctx, new ReaderldleTimeoutTask(ctx).
readerldleTimeNanos, TimeUnit.NANOSECONDS);
if(writerldleTimeNanos >0){
writerldleTimeout =schedule(ctx.new WriterldleTimeoutTask(ctx)writerldleTimeNanos.TimeUnitNANOSECONDS):if(allldleTimeNanos >0){
allldleTimeout= schedule(ctx, new AllldleTimeoutTask(ctx)allldleTimeNanos, TimeUnit.NANOSECONDS);

只要给定的参数大于 0,就创建一个定时任务,每个事件都创建。同时,将 state 状态设置为 1,防止重复初始化.。调用 initOutputChanged 方法,初始化 “监控出站数据属性”

相关文章:

Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)

剖析目的 Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一个服务----心跳机制 heartbeat.通过心跳检査对方是否有效,这是 RPC 框架中是必不可少的功能。下面我们分析一下 Netty 内部心跳服务源码实现。 源…...

C语言—每日选择题—Day65

前言 我们的刷题专栏又又又开始了,本专栏总结了作者做题过程中的好题和易错题。每道题都会有相应解析和配图,一方面可以使作者加深理解,一方面可以给大家提供思路,希望大家多多支持哦~ 第一题 1、如下代码输出的是什么…...

【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改

目录 前言 基本概念&理解 注意的点 查看环境变量的方法 PATH环境变量 PTAH应用系统指令 PTAH应用用户程序 命令行参数的修改(内存级) 配置文件的修改 windows环境变量 大家天天开心🙂 bash进程的流程。环境变量在系统指…...

5.7Python之元组

元组(Tuple)是Python中的一种数据类型,它是一个有序的、不可变的序列。元组使用圆括号 () 来表示,其中的元素可以是任意类型,并且可以包含重复的元素。 与列表(List)不同,元组是不可…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 一、简单介绍 二、简单视频放大抖动效果实现原理 三、简单视频放大…...

如何通过VPN访问内网?

VPN(Virtual Private Network)是一种通过公共网络建立私有网络连接的技术,可以在不同地点的网络中建立安全通道,实现远程访问内网资源的目的。本文将介绍如何通过VPN访问内网,并介绍一款名为“天联”的VPN服务。 什么是…...

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表 文章目录 RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表1. MQTT概览2. MQTT 5.0 特性1. 特性概要2. Docker中安装RabbitMQ及启用MQTT5.0协议 3. MQTT 5.0 功能列表1. 消息过期1. 描述2. 举例3. 实现 2. 订阅标识…...

常用脚本01 - 生成证书

1 生成证书 第一步、准备脚本文件 [rootharbor-01 ssl]# vim gencert.sh #!/usr/bin/env bash set -eDOMAIN"$1" IP"$2" WORK_DIR"$(mktemp -d)"if [ -z "$DOMAIN" ]; thenecho "Domain name needed."exit 1 fiecho "…...

【jQuery】jQuery框架

目录 1.jQuery基本用法 1.1选择器 1.2jQuery对象 1.3事件绑定 1.4链式编程 1.5过滤方法 1.6样式操纵 1.6属性操纵 1.7操作value 1.8查找方法 1.9类名操纵 1.10事件进阶 1.11触发事件 1.12window事件绑定 2.节点操作与动画 2.1获取位置 2.2滚动距离 2.3显示/隐…...

使用OMP复原一维信号(MATLAB)

参考文献 https://github.com/aresmiki/CS-Recovery-Algorithms/tree/master MATLAB代码 %% 含有噪声 % minimize ||x||_1 % subject to: (||Ax-y||_2)^2<eps; % minimize : (||Ax-y||_2)^2lambda*||x||_1 % y传输中可能含噪 yyw % %% clc;clearvars; close all; %% 1.构…...

Linux安装最新版Docker完整教程

参考官网地址&#xff1a;Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统&#xff0c;内核版本为3.10 1.3 安装依赖包 …...

iOS object-c self关键字总结

在Objective-C中&#xff0c;self 关键字是一个指向当前对象的指针。它是对象自身实例的别名&#xff0c;通常在对象内部的方法中使用&#xff0c;以提供一个指向当前对象的引用。使用 self 可以帮助你访问对象的属性和方法&#xff0c;特别是在处理消息传递和方法调用时。 以…...

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年&#xff0c;35M带宽&#xff0c;配置为&#xff1a;16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京&#xff0c;京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云16核64G云服务器…...

hive管理之ctl方式

hive管理之ctl方式 hivehive --service clictl命令行的命令 #清屏 Ctrl L #或者 &#xff01; clear #查看数据仓库中的表 show tabls; #查看数据仓库中的内置函数 show functions;#查看表的结构 desc表名 #查看hdfs上的文件 dfs -ls 目录 #执行操作系统的命令 &#xff01;命令…...

cpp 内存分区模型

c程序在执行前&#xff0c;将内存大方向划分为4个区域。 1.代码区&#xff1a;存放函数的二进制代码&#xff0c;有操作系统进行管理 2.全局区&#xff1a;存放全局变量和静态变量以及常量 3.栈区&#xff1a;由编译器自动分配释放&#xff0c;存放的函数参数和局部变量 4.…...

44.网络游戏逆向分析与漏洞攻防-角色管理功能通信分析-角色创建服务器反馈数据包分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…...

web安全学习笔记(6)

记一下第十节课的内容。 一.PHP语言中的if else判断 语法和c语言中非常类似&#xff0c;不再赘述&#xff0c;也可以使用if...elseif...elseif...else 1.True和False 2.&#xff0c;和 一个等号是赋值 两个等号是比较 三个等号是全等&#xff08;内容相等&#xff0c;数…...

揭秘“二次放号查询接口”:为您的通信安全保驾护航

在信息化社会中&#xff0c;手机号码已成为我们日常生活中不可或缺的身份标识。然而&#xff0c;您是否了解过“二次放号”这一现象&#xff0c;以及它可能对您的信息安全带来的影响&#xff1f;今天&#xff0c;我们将为您揭开“二次放号查询接口”的神秘面纱&#xff0c;揭示…...

字节8年经验之谈 —— 如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…...

ElasticSearch分词检索

1. 倒排索引&#xff1a;表示一种数据结构&#xff0c;分词词条与文档id集合的隐射关系 2. 它跟关系型数据库是一种互补的关系&#xff0c;因为关系型数据库支持事务操作&#xff0c;满足ACID原则 3. 索引库的文档字段只允许新增不允许修改 1.创建索引库 put /索引库名称2.1 …...

学习信息系统项目管理师我们以什么视角学习?

如果你只是死记硬背那些定义&#xff0c;你会觉得这本书枯燥乏味&#xff0c;而且做题时很容易掉进陷阱。但如果你**“入戏”**&#xff0c;把自己当成那个掌握全局的项目经理&#xff0c;很多答案你凭直觉就能选对。为了帮你把“入戏”进行到底&#xff0c;我给你三个**“入戏…...

pgui:轻量级跨平台C++ GUI框架的设计与集成实践

1. 项目概述&#xff1a;一个轻量级、跨平台的现代GUI框架如果你是一名C开发者&#xff0c;并且厌倦了Qt的臃肿、MFC的古老&#xff0c;或者觉得Dear ImGui虽然强大但需要自己管理太多渲染细节&#xff0c;那么你很可能和我一样&#xff0c;一直在寻找一个“刚刚好”的GUI解决方…...

Arm Neoverse CMN-650架构解析与性能优化

1. Arm Neoverse CMN-650架构概览CMN-650是Arm Neoverse平台中的第三代一致性网格网络(Coherent Mesh Network)互连技术&#xff0c;专为高性能计算和数据中心场景设计。作为SoC内部的核心互连架构&#xff0c;它承担着连接处理器集群、内存控制器、I/O子系统以及加速器单元的关…...

用1.44寸ST7735 TFT屏DIY一个桌面天气站(附STM32/Arduino完整项目代码)

用1.44寸ST7735 TFT屏打造智能桌面天气站&#xff08;STM32/Arduino全流程实战&#xff09; 在创客圈里&#xff0c;能够实时显示天气信息的桌面小设备一直备受青睐。本文将带你从零开始&#xff0c;利用常见的1.44寸ST7735 TFT屏幕&#xff0c;构建一个功能完善的智能天气站。…...

taotoken api密钥的精细化管理与审计日志功能实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API密钥的精细化管理与审计日志功能实践 1. 引言 在团队或企业环境中使用大模型服务时&#xff0c;API密钥的管理与安全…...

从零理解无刷电机方波驱动:用STM32CubeMX配置TIM1 PWM与EXTI中断实现换相

STM32无刷电机方波驱动实战&#xff1a;CubeMX配置与六步换相详解 1. 无刷电机驱动基础认知 无刷直流电机&#xff08;BLDC&#xff09;凭借高效率、长寿命和低噪音特性&#xff0c;已成为工业自动化、消费电子和智能家居领域的核心动力元件。与传统有刷电机相比&#xff0c;BL…...

在STM32F103上用FreeRTOS模拟I2C,为什么我劝你放弃硬件I2C?

为什么在STM32F103上使用FreeRTOS时&#xff0c;模拟I2C比硬件I2C更靠谱&#xff1f; 如果你正在使用STM32F103开发项目&#xff0c;并且需要在FreeRTOS环境下实现I2C通信&#xff0c;那么这篇文章可能会改变你的技术选型决策。很多开发者初次接触STM32时&#xff0c;都会优先考…...

别再裸发ROS图像了!手把手教你用image_transport优化带宽(附压缩参数配置)

机器人视觉开发者的带宽救星&#xff1a;深度解析ROS image_transport图像压缩实战 在机器人视觉应用开发中&#xff0c;高分辨率图像的实时传输常常成为性能瓶颈。当你的SLAM系统在Wi-Fi环境下频繁丢帧&#xff0c;或者目标检测算法因为图像延迟而失效时&#xff0c;问题的根源…...

【独家首发】ElevenLabs尚未官方支持的希伯来文增强模式:基于phoneme-level微调的48小时快速部署方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;希伯来文语音合成的技术挑战与ElevenLabs生态定位 希伯来文是一种自右向左&#xff08;RTL&#xff09;书写的辅音音素文字&#xff0c;其语音合成面临多重语言学与工程学挑战&#xff1a;元音符号&…...

如何高效配置Cool Request插件:Spring Boot接口调试的终极实践指南

如何高效配置Cool Request插件&#xff1a;Spring Boot接口调试的终极实践指南 【免费下载链接】cool-request IDEA API、Java Method debug tools 项目地址: https://gitcode.com/gh_mirrors/co/cool-request Cool Request是一款专为IntelliJ IDEA设计的强大HTTP接口调…...