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

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 的作用

  1. 连接管理:建立并维护与客户端之间的连接。
  2. 数据传输:读取来自客户端的数据包,并发送响应给客户端。
  3. 会话管理:管理客户端与服务器之间的会话,包括会话的创建、过期检查等。
  4. 安全性:如果启用了安全特性,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// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...

职场生存指南

求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...

Spring源码(八)--Spring实例化的策略

Spring实例化的策略有几种 &#xff0c;可以看一下 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企业级应用开发中&#xff0c;对象模型是构建软件架构的核心。它们不仅帮助我们组织代码&#xff0c;还提升了代码的可读性和可维护性。本文将深入介绍Java中的几种关键对象模型&#xff1a;POJO、DTO、DAO、PO、BO、VO、QO和ENTITY&#xff0c;以及DO&#xff0c;…...

Nginx日志分析:编写Shell脚本进行全面日志统计

Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中&#xff0c;Nginx都得到了广泛应用。在实际生产环境中&#xff0c;对Nginx日志的分析有助于我们了解网站的访问情况&#xff0c;发现潜在问题…...

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)

【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁&#x1f44a; 【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&#xf…...

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类&#xff08;自增运算符&#xff09;、--&#xff08;自减运算符&#xff09;赋值运算符逗号运算符&#xff08;顺序求值运算符&#xff09; 表达式 运算符 运算符的分类 C语言的运算符范围很宽&#xff0c;除了控制语句和输入输出…...

Python面试宝典第23题:分发糖果

题目 n 个孩子站成一排&#xff0c;给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求&#xff0c;给这些孩子分发糖果。 &#xff08;1&#xff09;每个孩子至少分配到 1 个糖果。 &#xff08;2&#xff09;相邻两个孩子评分更高的孩子会获得更多的糖果。 请…...

Java与模式及其应用场景知识点分享(电子版)

前言 Java 编程语言自1995年问世以来&#xff0c;其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因&#xff0c;而Java吸收总结了前人的经验教训&#xff0c;反映了最新技术(the state ofthe art)&#xff0c;对其受到欢迎和采用&#xff0c;恐怕…...

软考高级第四版备考--第36天(审计内容)

IT内部控制审计&#xff1a;IT内部控制审计主要包括组织层面IT控制审计、IT一般控制审计及应用控制审计 IT专项审计&#xff1a;IT专项审计主要包括信息系统生命周期审计、信息系统开发过程审计、信息系统运行维护审计、网络与信息安全审计、信息系统项目审计、数据审计...

文件IO相关作业

1> 使用文件IO完成&#xff0c;将源文件中的所有内容进行加密&#xff08;大写转小写、小写转大写&#xff09;后写入目标文件中 源文件内容不变 #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的区别 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;【信创】adduser与useradd的区别 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创终端操作系统上adduser和useradd命令区别的文章。adduser和useradd都是用于在Linux系统上添加用户的命令&#xff0c;但它们…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

boost::filesystem::path文件路径使用详解和示例

boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类&#xff0c;封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解&#xff0c;包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...