上一篇:ZooKeeper源码分析(十)Leader与Follower之间如何进行数据同步
既然要看客户端和服务端的连接,我们就先要找到zk客户端是那个类,在之前的源码分析中,我们了解到创建一个客户端其实就是创建一个ZooKeeper,这个就代表了一个zk客户端
我们再来看一下ZooKeeper的构建方法
构造方法里面最重要的就是创建了一个ClientCnxn的线程,并且将其启动了
我们先来看一下ClientCnxn的构造方法
这个构造方法里面又会创建2个比较重要的线程,一个是用来发消息的,一个是用来接收消息的,其中SendThread线程很重要;
我们看完了ClientCnxn的构造方法,在来看一下他后面马上跟着的start方法,这里其实就直接调用了之前2个线程的start方法将他们启动;说明主要逻辑都在那个2个线程里面
我们发现其实与服务端建立连接的逻辑就在SendThread线程的run方法中,所以这个线程比较重要;
连接的时候会从zk服务端列表随机选择一台机器进行连接
我们在来看一下这个实际进行连接的一个方法:clientCnxnSocket.connect(addr);
就这么几行代码,这个就是目前使用最广的中间件生产级网络通信的代码,以后我们做网络通信连接的时候就可以仿造这个代码
创建了SocketChannel之后就开始进行连接了,将SocketChannel注册到Selector上面并监听连接请求,在调用sock.connect(addr)请求zk服务端进行连接
我们再来看一下zk服务端是怎么处理连接请求的,还记得我们最开始讲的QuorumPeerMain中的集群启动的代码吗?这个里面会创建一个ServerCnxnFactory,这个就是与客户端建立连接的类;
createFactory方法里面实际会创建NIOServerCnxnFactory类
在调用quorumPeer.start();方法时就会将NIOServerCnxnFactory启动,为什么是启动,没错,NIOServerCnxnFactory其实就是一个线程,只是名称有点。。
NIOServerCnxnFactory的run方法其实就是不断的循环,通过selector.selectedKeys()方法将所有SelectionKey取出来,去判断是否有请求进来,如果有连接请求进来则会将代表节点通信的SocketChannel注册重新注册到selector上面去,并且告诉selector监听读请求
在创建一个NIOServerCnxn,里面封装SocketChannel和SelectionKey,并添加到HashSet里面去,这样的话如果zk服务端想给zk客户端发送回调消息就可以通过这个HashSet集合里面的SocketChannel和SelectionKey去发送数据了;
到这里,客户端和zk服务端就正式建立的连接;
我们发现在zk客户端在连接成功之后还有一些逻辑,有什么sessionId什么的,为什么,因为连接建立成功了还不够,zk还有一个session机制,后续心跳机制,重连机制,故障感知,超时机制、清理机制等等都是基于session来的,今天先到这里,后续更精彩;
本文TAG:服务端
- 上一篇: 火炬之光2最强装备的简单介绍
- 下一篇: ios手游今日开服时间表(ios今日最新手游开服表)
猜你喜欢
- 2023-08-30赤炎单职业传奇嬉戏里做事押镖任务中有什么方法?讨论赤炎单职业传奇每日押镖任务帮扶你极快升级
- 2023-08-30龙吟单职业传奇中帮你如何搭配夫妻传送功能(龙吟单职业传奇攻略详解)
- 2023-08-30首次接触合击传奇卡怪游戏玩家的绝对晓得的最好怪物,,跟合击传奇卡怪中最先起步的高好机会打宝地图无保留分享传授
- 2023-08-30【双通单职业传奇攻略】双通单职业传奇背包东西扔不出去是怎么回事
- 2022-02-22新开传奇手游使用拍卖行用于交易时最好提前沟通好
- 2022-02-22有哪些方法可以让我们弄到元宝
- 最近发表
- 标签列表
-
- 传奇手游私服 (7)
- 新开传奇手游网站 (7)
- 传奇单职业 (2)
- 传奇手游变态版 (1)
- 传奇发布网 (7)
- 传奇sf手游版 (1)
- 新开传奇 (1)
- 传奇私服 (1)
- 拳皇7k7k小游戏 (0)
- nitrome小游戏 (0)
- 最新传奇发布网 (0)
- 每日新开传奇网 (0)
- 找176复古传奇 (0)
- 超级变态热血传奇 (0)
- nba2k11最新名单 (0)
- 王者荣耀更新 (0)
- 王者荣耀体验服申请 (0)
- 英雄联盟出装顺序 (0)
- 三国志单机游戏 (0)
- 王者荣耀宫本武藏符文 (0)
- 梦幻西游109神器任务攻略 (0)
- 下载英雄联盟 (0)
- 机械公敌兰博出装 (0)
- 王者荣耀西施 (0)
- 王者荣耀无限火力 (0)
- 不知火舞王者荣耀 (0)
- 300英雄三笠出装 (0)
- 冒险岛2职业 (0)
- 龙将2官网 (0)
- 热血传奇怀旧版好玩吗 (0)
- 传奇超级 (0)
- 传奇师服 (0)
- 迷失传奇发布网 (0)
- 韩版传奇私服发布网 (0)
- 传世新开 (0)
- 传奇2外挂 (0)
- 传奇复古 (0)
- 单职业变态 (0)
- 传奇sf180 (0)
- 传世sf吧 (0)
- 传奇私服gm命令大全 (0)
- 传奇世界私服刷元宝 (0)
- dnf私服发布网 (0)
- 网页三国游戏排行榜 (0)
- 傲视千雄私服 (0)
- 热血传奇176客户端下载 (0)
- 最新机战私服 (0)
- 传奇吉吉免费版 (0)
- 蜘蛛纸牌游戏 (0)
- 最热门的网游排行榜 (0)
- 2d网游 (0)
- 网游私服排行榜 (0)
- moba网游 (0)
- 439小游戏 (0)
- 飞车小游戏 (0)
- 奥奇传说小游戏 (0)
- 龙斗士小游戏 (0)
- 下载手机游戏 (0)
- 维京神域之战 (0)
- 星际2单机 (0)
- 防守类单机游戏 (0)
- 灰烬攻略 (0)
- 战神3pc版 (0)
- 腐尸之屋 (0)
- 新神奇传说3秘籍 (0)
- 生化危机5怎么存档 (0)
- 三国群英传1单机版下载 (0)
- 捕鱼达人手机版 (0)
- 仙剑奇侠传游戏1 (0)
- 暴力摩托单机版下载 (0)
- fifa12下载 (0)
- 色单机游戏 (0)
- 三国志13修改器 (0)
- 梦幻西游单机版神剑情天3 (0)
- 对打单机游戏 (0)
- 三国群英传7补丁 (0)
- 最好单机游戏下载 (0)
- 流星蝴蝶剑秘籍大全 (0)
- 孢子 (0)
- 梦幻西游赚钱 (0)
- 梦幻西游答题 (0)
- 王者荣耀防沉迷 (0)
- 梦幻西游挖图技巧 (0)
- 梦幻岛游戏 (0)
- 轩辕剑网游官网 (0)
- 梦幻西游手游论坛 (0)
- 极道阴阳师 (0)
- 仙剑奇侠传3下载 (0)
- 七龙珠人物换装2 (0)
- 赛尔号手机版下载 (0)
- lol战队名字 (0)
- 黑湾海盗中文版 (0)
- 超级街霸4街机版 (0)
- 侵略行为 (0)
- 孤岛惊魂3结局 (0)
- 龙珠单机游戏大全 (0)
- 仙剑三游戏下载 (0)
- 策略单机游戏 (0)
- 家园2简体中文版 (0)
- 现代战争2 (0)