1.1. 客户端源码

1.1.1. 总体流程

启动客户端 zkCli.sh文件里面的配置

实际运行

  public static void main(String args[])

        throws KeeperException, IOException, InterruptedException

    {

        ZooKeeperMain main = new ZooKeeperMain(args);  

        main.run();

    }

Main方法流程:

  1. new ZooKeeperMain 对象
  2. 调用run()方法

在ZookeeperMain的构造方法里面,重点是

 public ZooKeeperMain(String args[]) throws IOException, InterruptedException {

        cl.parseOptions(args);

        System.out.println("Connecting to " + cl.getOption("server"));

     //连接上ZK

        connectToZK(cl.getOption("server"));

    }
  protected void connectToZK(String newHost) throws InterruptedException, IOException {

        if (zk != null && zk.getState().isAlive()) {

            zk.close();

        }

        host = newHost;

        boolean readOnly = cl.getOption("readonly") != null;

        zk = new ZooKeeper(host,

                 Integer.parseInt(cl.getOption("timeout")),

                 new MyWatcher(), readOnly);

    }

最终在connectToZK方法里面也就是使用原生的Zk客户端进行连接的。

   public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,

            boolean canBeReadOnly)

        throws IOException

    {

        LOG.info("Initiating client connection, connectString=" + connectString

                + " sessionTimeout=" + sessionTimeout + " watcher=" + watcher);

        watchManager.defaultWatcher = watcher;

        ConnectStringParser connectStringParser = new ConnectStringParser(

                connectString);

        HostProvider hostProvider = new StaticHostProvider(

                connectStringParser.getServerAddresses());

        cnxn = new ClientCnxn(connectStringParser.getChrootPath(),

                hostProvider, sessionTimeout, this, watchManager,

//获得和服务端连接的对象

                getClientCnxnSocket(), canBeReadOnly);

         //调用start()

        cnxn.start();

    }

public void start() {

sendThread.start();

eventThread.start();

}

1.1.2. 开启SendThread线程

org.apache.zookeeper.ClientCnxn.SendThread#run

1.1.3. 开启EventThread

org.apache.zookeeper.ClientCnxn.EventThread.run

1.1.4. 总结:

1.2. 服务端源码(单机)

1.2.1. 总体流程

1.2.2. 具体处理流程

Zookeeper源码解读的更多相关文章

  1. 【ZooKeeper系列】3.ZooKeeper源码环境搭建

    前文阅读: [ZooKeeper系列]1.ZooKeeper单机版.伪集群和集群环境搭建 [ZooKeeper系列]2.用Java实现ZooKeeper API的调用 在系列的前两篇文章中,介绍了Zo ...

  2. zookeeper 源码(一) 选举和同步数据

    前言 在开始阅读代码前我们先来了解一下zk 的大致结构,具体大概要实现的核心功能有那些,心中有个大概的框架阅读代码时再深入其中的细节,就会非常好懂,本人觉得这是一个阅读源码的好方法,可以最快地切入到源 ...

  3. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. SDWebImage源码解读 之 NSData+ImageContentType

    第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...

  8. SDWebImage源码解读 之 UIImage+GIF

    第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...

  9. SDWebImage源码解读 之 SDWebImageCompat

    第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...

随机推荐

  1. java面试的一些问题

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  2. CSS动画实例:旋转的圆角正方形

    在页面中放置一个类名为container的层作为效果呈现容器,在该层中再定义十个名为shape的层层嵌套的子层,HTML代码描述如下: <div class="container&qu ...

  3. Git那点事儿

    Git的分支你们是怎么管理的?/ Git的分支管理策略 主分支 master 开发分支 develop 功能分支 feature 预发布分支 release bug 分支 fixbug 其它分支 ot ...

  4. Android 在代码中修改TextView的DrawableRight等方向上的图片

    在XML文件中可以对TextView进行设置: android:drawableTop="@drawable/XXX" android:drawableBottom="@ ...

  5. 这都Java15了,Java7特性还没整明白?

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  6. 实战开发,使用 Spring Session 与 Spring security 完成网站登录改造!!

    上次小黑在文章中介绍了四种分布式一致性 Session 的实现方式,在这四种中最常用的就是后端集中存储方案,这样即使 web 应用重启或者扩容,Session 都没有丢失的风险. 今天我们就使用这种方 ...

  7. (趣味哈哈镜)JMF中摄像头相关的问题

    JMF已经非常古老了.最近由于做实验的需要,不得不使用JMF处理视频.开发使用win10系统和eclipse.使用中的问题如下: 1.首先想要使用JMF需要必须安装32位JDK,同时编译软件也需要是3 ...

  8. 为什么 max() 应该写成 b < a ? a : b 呢?

    在 < C++ Templates 2nd Edition >Chapter 1 中,作者将 max() 模板定义如下: template <typename T> T max ...

  9. golang interface 多态

    原文链接:http://www.52bd.net/code/210.html demo: package main import ( "fmt" ) //通知行为的接口 type ...

  10. JAVA作业—字符串操作

    ------------恢复内容开始------------ ------------恢复内容开始------------ ------------恢复内容开始------------ ------- ...