《Zookeeper》源码分析(七)之 NIOServerCnxn的工作原理

目录

  • NIOServerCnxn
    • readPayload()
    • handleWrite(k)
    • process()

NIOServerCnxn

在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理,一个NIOServerCnxn代表客户端与服务端的一个连接,它用于处理两者之间的交互,先看下其类结构:
在这里插入图片描述

从类结构可知,NIOServerCnxn继承了ServerCnxn,实现了StatsWatcher接口,所以说它本质上也是一个Watcher。再看下它的数据结构:
在这里插入图片描述

NIOServerCnxn主要负责客户端与服务端的数据的收发,其中,收到的数据存放于incomingBufferlenBuffer,待发送的存放于outgoingBuffers。接下来我们看下处理IO请求的doIO()方法。
在这里插入图片描述

如果是读就绪,则调用readPayload()处理接收到的数据;如果是写就绪,则调用handleWrite(k)发送数据。

readPayload()

读就绪事件
在这里插入图片描述

最终是将数据提交给服务器实例zkServer进行处理。

handleWrite(k)

写就绪事件
在这里插入图片描述

到这里不禁好奇outgoingBuffers的数据怎么获得的呢?NIOServerCnxn对外提供了sendBuffer(ByteBuffer... buffers)方法,当需要发送数据给客户端时可调用此方法
在这里插入图片描述

process()

NIOServerCnxn实现了Watcher接口,Watcher只有一个方法,即事件的回调方法process()
在这里插入图片描述

接下来我们详细分析下数据的序列化serialize(),从中可以看出zookeeper通信的响应协议。
在这里插入图片描述

至此,NIOServerCnxn的简单介绍就到此为止,总结一下它的功能,它是服务端与客户端通信的最底层处理,此外,它本身也是一个Watcher。

至此,服务端与客户端的通信环境分析就到此,在NIOServerCnxn.readPayload()方法中会把来自客户端的请求传递给服务器实例ZookeeperServer处理,zookeeper集群中有三种角色:LeaderFollowerObserver,不同的角色ZookeeperServer实例类型是不一样的,具体得等到选举结束确定角色后才会创建相应的实例,所以,从下文开始分析zookeeper的选举通信以及选举过程。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 面试题 02.07. 链表相交

题目:leetcode 面试题 02.07. 链表相交 描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 思路&…

【ChatGPT 指令大全】怎么使用ChatGPT来帮我们写作

在数字化时代,人工智能为我们的生活带来了无数便利和创新。在写作领域,ChatGPT作为一种智能助手,为我们提供了强大的帮助。不论是作文、文章,还是日常函电,ChatGPT都能成为我们的得力助手,快速提供准确的文…

开发工具IDEA的下载与初步使用【各种快捷键的设置,使你的开发事半功倍】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于IDEA的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.IDEA的简介以及优势 二.IDEA的下载 1.下…

【二】SPI IP核的使用

【一】SPI IP核使用:传送门 基于qsys通过spi外部总线协议对sd卡进行读写操作 一、实验平台与实验的目的: ​ 正点原子开拓者、芯片型号:EP4CE10F17C8;还需要一张sd卡。 ​ 该实验主要是利用SPI IP核驱动SD卡来实现读写实验&am…

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

gitlab-Runner搭建

root wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/29/gitlab-runner-12.6.0-1.x86_64.rpm/download.rpm rpm -ivh download.rpm ---- 安装 rpm -Uvh download.rpm -----更新升级 然后运行&#xff1a; gitlab-runner register --url https://git…

Linux命令200例:tree用于以树状结构显示文件和目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

逐步分解,一文教会你如何用 jenkins+docker 实现主从模式

♥ 前 言 jenkins 主从模式想必大家都不陌生&#xff0c;大家在学习过程中为了学习方便都在自己本地搭建了 jenkins 环境&#xff0c;然后通过 javaweb 方式实现&#xff0c;对于 docker 下实现主从模式大家好像兴趣挺大。今天就通过这篇文章给大家讲讲怎么玩&#xff0c;希…

集成接近和环境光传感器市场调查报告

集成接近和环境光传感器在单个传感器中集成接近和环境光感应功能。该传感器广泛应用于物联网 (IoT) 设备、消费电子产品和可穿戴设备&#xff0c;集成接近和环境光传感器可以自动调整屏幕亮度并根据接近情况打开/关闭屏幕&#xff0c;以降低设备功耗。集成接近和环境光传感器广…

C指针:程序员的神奇箭头,穿越内存的冒险之旅!

目录 &#x1f575;️‍♂️ 引言&#xff1a;指针&#xff0c;那些指向星星的小箭头&#xff01; 一、&#x1f3af; 探索箭头&#xff1a;指针的基础知识 1.1 指针是什么&#xff1f; 1.2 解引用操作符&#xff1a;* 是关键 1.3 指针的比较和运算 1.4 空指针&#xff1a…

PP模块生产过程检验(工序检验)

质量检验是在一些情形下对物料进行检查的一个操作,用于检验物料是否符合标准。 1.常见检验类型: (1)进货检验(Incoming material Quality Check,IQC) (2) 生产过程检验(In Process Quality Check,IQPC) (3) 最终检验/产品检验(Final Quality Check,FQC) (4)出…

项目实战 — 消息队列(7){虚拟主机设计(2)}

目录 一、消费消息的规则 二、消费消息的具体实现方法 &#x1f345; 1、编写消费者类&#xff08;ConsumerEnv&#xff09; &#x1f345; 2、编写Consumer函数式接口&#xff08;回调函数&#xff09; &#x1f345; 3、编写ConsumeerManager类 &#x1f384;定义成员变…