Zookeeper客户端和服务端NIO网络通信源码剖析
文章目录
- 服务端的ServerCnxFactory到底是个什么东西?
- ServerCnxFactory 的作用
- ServerCnxFactory 的实现
- 使用 ServerCnxFactory 的示例
- 注意事项
- ServerCnxFactory是什么时候完成初始化的?
- 初始化流程
- 代码示例
- 详细步骤
- 1. 创建实例
- 2. 配置
- 3. 启动
- 初始化时机
- 总结
- 服务端基于NIO的ServerSocket是什么时候启动的?
- NIOServerCnxnFactory 的启动过程
- 代码示例
- 启动时机
- 启动过程详解
- 总结
- 创建一个ZooKeeper对象实例就是与服务端建立一个长连接?
- 创建 ZooKeeper 对象实例
- 连接建立过程
- 代码示例
- 详细步骤
- 1. 创建 Watcher 对象
- 2. 创建 ZooKeeper 对象
- 3. 连接建立
- 4. 协商会话
- 5. 建立会话
- 6. 心跳检测
- 7. 完成连接
- 总结
- ZooKeeper初始化的时候会干什么?
- 初始化过程
- 1. 创建 `ZooKeeper` 实例
- 2. 连接字符串解析
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- 代码示例
- 总结
- ClientCnxn是如何进行初始化的?
- 初始化过程
- 1. 创建 `ClientCnxn` 实例
- 2. 解析连接字符串
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- 代码示例
- 初始化过程详解
- 1. 创建 `ClientCnxn` 实例
- 2. 解析连接字符串
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- 总结
- 启动ClientCnxn的时候是在干什么?
- 启动过程
- 1. 创建 `ClientCnxn` 实例
- 2. 解析连接字符串
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- 代码示例
- 启动过程详解
- 1. 创建 `ClientCnxn` 实例
- 2. 解析连接字符串
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- 总结
- 客户端如何采用NIO的方式与服务端建立长连接?
- ZooKeeper 客户端 NIO 连接机制
- 1. 创建 `ClientCnxn` 实例
- 2. 解析连接字符串
- 3. 创建会话
- 4. 协商会话参数
- 5. 设置状态监听器
- 6. 连接建立
- 7. 等待连接确认
- 8. 开始会话
- 9. 心跳检测
- 10. 错误处理
- NIO 连接机制详解
- 1. 创建 `SocketChannel`
- 2. 连接服务端
- 3. 注册选择器
- 4. 监听连接事件
- 5. 读写操作
- 6. 心跳检测
- 7. 错误处理
- 总结
- 服务接收到连接之后会做什么事情?
- 服务端处理流程
- 1. 接收连接请求
- 2. 创建 `ServerCnxn` 实例
- 3. 接受连接
- 4. 协商参数
- 5. 创建会话
- 6. 会话管理
- 7. 数据传输
- 8. 心跳检测
- 9. 错误处理
- 代码示例
- 详细步骤
- 1. 接收连接请求
- 2. 创建 `ServerCnxn` 实例
- 3. 接受连接
- 4. 协商参数
- 5. 创建会话
- 6. 会话管理
- 7. 数据传输
- 8. 心跳检测
- 9. 错误处理
- 总结
- 客户端在连接建立之后会做什么事情?
- 客户端连接建立之后的操作
- 1. 确认连接状态
- 2. 等待连接确认
- 3. 执行 ZooKeeper 操作
- 4. 发送心跳消息
- 5. 处理会话事件
- 6. 错误处理
- 代码示例
- 总结
- Session的建立以及工业级的Session管理机制
- 会话建立过程
- 1. 连接建立
- 2. 发起会话请求
- 3. 协商会话参数
- 4. 创建会话
- 5. 会话确认
- 6. 状态变更通知
- 工业级的会话管理机制
- 1. 会话超时
- 2. 心跳检测
- 3. 会话过期处理
- 4. 会话迁移
- 5. 会话恢复
- 6. 会话唯一性
- 7. 数据一致性保证
- 代码示例
- 总结
服务端的ServerCnxFactory到底是个什么东西?
在 ZooKeeper 中,ServerCnxFactory 是一个非常重要的类,它负责处理服务端(也就是 ZooKeeper 服务器)与客户端之间的网络通信。ServerCnxFactory 实现了服务器与客户端之间的连接管理、数据传输以及会话管理等功能。
ServerCnxFactory 的作用
- 连接管理:建立并维护与客户端之间的连接。
- 数据传输:读取来自客户端的数据包,并发送响应给客户端。
- 会话管理:管理客户端与服务器之间的会话,包括会话的创建、过期检查等。
- 安全性:如果启用了安全特性,
ServerCnxFactory还会负责认证客户端的身份。
ServerCnxFactory 的实现
ServerCnxFactory 有几个不同的实现,每种实现都采用了不同的网络模型和技术。ZooKeeper 提供了多种 ServerCnxFactory 实现,以适应不同的性能需求和环境要求。
- NIOServerCnxFactory:基于 Java NIO(非阻塞 I/O)技术实现,可以处理大量并发连接,适用于高性能场景。
相关文章:
Zookeeper客户端和服务端NIO网络通信源码剖析
文章目录 服务端的ServerCnxFactory到底是个什么东西?ServerCnxFactory 的作用ServerCnxFactory 的实现使用 ServerCnxFactory 的示例注意事项ServerCnxFactory是什么时候完成初始化的?初始化流程代码示例详细步骤1. 创建实例2. 配置3. 启动初始化时机总结服务端基于NIO的Ser…...
从DevOps到DevSecOps是怎样之中转变?
DevSecOps是DevOps实践的自然演进,其重点是将安全集成到软件开发和部署流程中。在DevOps和DevSecOps发展之前,企业通常在在软件部署前进行集中的安全测试,导致安全介入严重滞后,漏洞分风险无法及时修复,影响上线交付。…...
ORM与第三方数据库对接的探讨及不同版本数据库的影响
对象关系映射(Object-Relational Mapping,ORM)是一种将程序中的对象与数据库中的数据进行映射的技术,使开发者可以通过操作对象来间接操作数据库。然而,在实际应用中,ORM并不是总能完美地对接陌生的第三方数…...
Windows远程桌面无法拷贝文件问题
场景说明 Winwdows远程桌面,相比Linux方便一点就是,同是windows连接,其中复制粘贴功能,可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时,发现无法在服务器上复制内容到本地,也无法从…...
优化数据处理效率,解读 EasyMR 大数据组件升级
EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前,我们已就其展开了多方位、多角度的详尽介绍。而此次,我们成功接入了大数据组件的升级和回滚功能,能够借助 EasyMR …...
并发编程AtomicInteger详解
AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类,用于对 int 类型的变量进行原子操作。它利用底层的 CAS(Compare-And-Swap)机制,实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...
ctfshow 权限维持 web670--web679
web670 <?php// 题目说明: // 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...
职场生存指南
求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...
Spring源码(八)--Spring实例化的策略
Spring实例化的策略有几种 ,可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…...
部署KVM虚拟化平台
文章目录 KVM虚拟化架构KVM组成KVM虚拟化三种模式 KVM虚拟化架构 KVM模块直接整合在Linux内核中 KVM组成 e KVM Driver虚拟机创建虚拟机内存分配虚拟CPU寄存器读写虚拟CPU运行 QEMU(快速仿真器) 模拟PC硬件的用户控件组件提供I/O设备模型及访问外设的途径 KVM虚拟化三种模式 客…...
Java对象模型深度剖析:从POJO到ENTITY
引言 在Java企业级应用开发中,对象模型是构建软件架构的核心。它们不仅帮助我们组织代码,还提升了代码的可读性和可维护性。本文将深入介绍Java中的几种关键对象模型:POJO、DTO、DAO、PO、BO、VO、QO和ENTITY,以及DO,…...
Nginx日志分析:编写Shell脚本进行全面日志统计
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中,Nginx都得到了广泛应用。在实际生产环境中,对Nginx日志的分析有助于我们了解网站的访问情况,发现潜在问题…...
【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)
【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁👊 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分…...
C语言——运算符及表达式
C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…...
Python面试宝典第23题:分发糖果
题目 n 个孩子站成一排,给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果。 (1)每个孩子至少分配到 1 个糖果。 (2)相邻两个孩子评分更高的孩子会获得更多的糖果。 请…...
Java与模式及其应用场景知识点分享(电子版)
前言 Java 编程语言自1995年问世以来,其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因,而Java吸收总结了前人的经验教训,反映了最新技术(the state ofthe art),对其受到欢迎和采用,恐怕…...
软考高级第四版备考--第36天(审计内容)
IT内部控制审计:IT内部控制审计主要包括组织层面IT控制审计、IT一般控制审计及应用控制审计 IT专项审计:IT专项审计主要包括信息系统生命周期审计、信息系统开发过程审计、信息系统运行维护审计、网络与信息安全审计、信息系统项目审计、数据审计...
文件IO相关作业
1> 使用文件IO完成,将源文件中的所有内容进行加密(大写转小写、小写转大写)后写入目标文件中 源文件内容不变 #include<myhead.h>int main(int argc, const char *argv[]) {//判断传入的是否是两个文件if(argc!3){write(2,"inp…...
vue3 watch监听 父子组件通信
目录 01 watch监听方式 02 父子组件的通信 01 watch监听方式 1.watch(被监听的变量,(新值,旧值)>{ }) 默认直接就是深层监听 如果想要配置深度监听和默认触发 需要在第三个参数定义options对象 2.watch(被监听的变量,()>{},{ deep:true, immediate:true 项目打开后就执…...
【信创】adduser与useradd的区别 _ 统信 _ 麒麟 _ 中科方德
原文链接:【信创】adduser与useradd的区别 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇关于在信创终端操作系统上adduser和useradd命令区别的文章。adduser和useradd都是用于在Linux系统上添加用户的命令,但它们…...
音乐自由之路:Unlock-Music技术突破实战指南
音乐自由之路:Unlock-Music技术突破实战指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcod…...
8-Bit美学不妥协性能|像素剧本圣殿UI渲染与LLM推理资源隔离方案
8-Bit美学不妥协性能|像素剧本圣殿UI渲染与LLM推理资源隔离方案 1. 项目概述 像素剧本圣殿(Pixel Script Temple)是一款专为剧本创作者设计的AI辅助工具,基于Qwen2.5-14B-Instruct大模型深度微调开发。它将高性能AI推理能力与独…...
基于AI政策路径与通胀预期模型的美联储决策分析:鲍威尔观望信号引发加息预期归零
摘要:本文通过构建AI政策路径预测模型,结合通胀预期识别系统、能源价格传导算法与劳动力市场评估框架,对美联储在当前环境下的利率决策逻辑进行分析,重点解析“观望策略”背后的模型依据及市场加息预期快速回落的原因。一、AI政策…...
别再手动画封装了!用嘉立创EDA免费库5分钟搞定Altium Designer缺失的器件
5分钟极速救援:用嘉立创EDA破解Altium Designer封装缺失难题 深夜11点,李工盯着屏幕上闪烁的光标和半成品的PCB布局图,额头渗出细密的汗珠。项目交付截止前48小时,团队突然发现Altium Designer官方库中缺少关键芯片TPS5430DDAR的封…...
基于Spark+Hadoop+Hive大数据分析的城市街道路灯智能化点亮时间优化研究
前言随着城市化进程的加速,城市街道路灯系统在保障交通安全、提升城市形象与居民生活质量等方面发挥着关键作用。本研究聚焦于城市街道路灯智能化点亮时间的优化,依托大数据分析技术深入挖掘路灯照明需求与环境因素之间的复杂关联。 研究整合多源大数据&…...
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载 如果你正在构建一个智能搜索系统、问答机器人或者文档分析工具,那么“重排序”这个环节你一定不陌生。简单来说,它就像一个智能裁判,当你的检索系统从海量文档…...
MongoDB:如何构建“数据回收站“,防止人为误删数据(延迟节点)
更多内容请见: 《深入掌握MongoDB数据库》 - 专栏介绍和目录 一、引言:数据误删的现实挑战 在企业级数据库系统中,人为误删数据是导致业务中断的常见原因。根据2023年数据库安全报告,37%的数据丢失事件是由人为错误引起的,其中误删除操作占主要部分。MongoDB作为企业级No…...
UEFI SCT编译调试踩坑记:我的AARCH64环境搭建与问题解决实录
UEFI SCT编译调试实战:AARCH64环境搭建与疑难问题全解析 当你在深夜的办公室里盯着屏幕上闪烁的光标,第N次尝试编译UEFI SCT测试套件时,那种既熟悉又陌生的挫败感再次袭来。作为UEFI开发者,我们都经历过这样的时刻——官方文档看似…...
抖音下载器:从零开始,轻松获取无水印视频的完整指南
抖音下载器:从零开始,轻松获取无水印视频的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…...
PasteMD算力优化成果:Ollama量化后llama3:8b仅需4GB内存,推理速度提升2.3倍
PasteMD算力优化成果:Ollama量化后llama3:8b仅需4GB内存,推理速度提升2.3倍 1. 项目背景与优化挑战 PasteMD是一款基于本地Ollama框架的剪贴板智能美化工具,它能够将杂乱的文本内容一键转换为结构化的Markdown格式。这个工具完全私有化部署…...
