中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

zkclient會話過程是怎樣的

這篇文章主要介紹“zk client會話過程是怎樣的”,在日常操作中,相信很多人在zk client會話過程是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”zk client會話過程是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

成都創(chuàng)新互聯(lián)是專業(yè)的且末網(wǎng)站建設公司,且末接單;提供成都做網(wǎng)站、成都網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行且末網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

client會話過程

zk客戶端的主要核心組件

zk客戶端會話過程

初始化階段

創(chuàng)建階段

響應階段

UML圖

zk client會話過程是怎樣的

zk客戶端主要組件

zookeeper 客戶端入口

ClientWatchManager:客戶端Watch管理器

HostProvider:客戶端地址管理器

ClientCnxn:核心線程,包含SendThread和EventThread兩個線程

SendThread為i/o線程,主要負責客戶端和服務器之間網(wǎng)絡io

EventTrhead為事件線程

zk client會話過程是怎樣的

初始化階段

主要分為:

1 初始化ZooKeeper對象

通過調(diào)用zookeeper的構(gòu)造方法實例化一個對象,初始化過程中會創(chuàng)建一個watcher管理器ClientWatcherManager

2 設置會話默認watcher

如果構(gòu)造中傳入一個watcher,就將它作為默認watcher保存到ClientWatcherManager

3 構(gòu)建zk服務地址列表管理器HostProvider

通過構(gòu)造器傳入的服務端地址列表,將其保存在服務器地址列表管理器中HostProvider

4 創(chuàng)建并初始化客戶端網(wǎng)絡連接

zookeeper客戶端創(chuàng)建一個網(wǎng)絡連接器ClientCnxn,用來管理客戶端和服務端網(wǎng)絡交互

創(chuàng)建ClientCnxn過程中還會初始化客戶端兩個核心隊列outGoingQueue和pendingQueue

作為客戶端發(fā)送請求隊列和服務端響應等待隊列

5初始化SendThread和EventThread

會話創(chuàng)建階段

6啟動SendThread和EventThread

sendTHread首先會判斷當前客戶端的狀態(tài),進行一系列清理性工作,為客戶端發(fā)送“會話創(chuàng)建”請求準備

7獲取一個服務地址

在創(chuàng)建TCP之前,SendThread首先需要獲取一個ZooKeeper服務器的目標地址,通常就是從HostProvider中隨機獲取出一個地址,然后委托給ClientCnxnSocket去創(chuàng)建與Zookeeper服務器之間的TCP連接

8 創(chuàng)建tcp連接,獲取一個服務器地址后,clientCnxnSocket負責和服務器創(chuàng)建一個TCP長連接

9構(gòu)建ConnectRequest請求

在TCP連接創(chuàng)建完畢后,就說明已經(jīng)和zookeeper服務器完成了連接呢?其實不是,上面的步驟只是從網(wǎng)絡tcp層完成了socket連接,但沒有完成zookeeper客戶端和服務端的連接

SendThread會負責當前請求參數(shù),構(gòu)造出一個ConnectRequest請求,同時將包裝成網(wǎng)絡io層的Packet對象,放入發(fā)送隊列outgoingQueue中

10 發(fā)送請求

ClientCnxnSocket將從outgoingQueue中取出待發(fā)送的Packet,序列化成bytebuffer,進行發(fā)送

響應處理階段

11響應處理

接收到服務端響應后,首先判斷當前客戶端狀態(tài)是否是“已初始化”,如果沒有完成初始化,那么認為該響應一定是會話創(chuàng)建請求的響應,交給readConnnectResult方法處理響應

12 處理respinse

ClientCnxnSocket會對接收到的服務端響應進行反序列化,得到ConnectResponse對象,并從中獲取到zookeeper服務端分配的會話sessionId,

13 連接成功

通知SendThread線程,處理會話參數(shù)設置,包括時間設置等等

另一個方面,需要通知地址管理器HostProvider當前成功連接的服務器地址

14 生成事件

為了能夠讓上層應用感應到會話成功創(chuàng)建,SendThread會生成一個事件SyncConnected-None,代表會話創(chuàng)建成功,并將事件傳遞給EventTread線程

15 查詢Watcher

EventThread收到事件后,從ClientWatchManager管理器中查詢出對應的watcher,放入waitingEvents隊列中

16 處理事件

取出事件對應的watcher列表,調(diào)用process接口,達到出發(fā)watcher目的

public ZooKeeper(
    String connectString,
    int sessionTimeout,
    Watcher watcher,
    boolean canBeReadOnly,
    HostProvider aHostProvider,
    ZKClientConfig clientConfig) throws IOException {
    LOG.info("Initiating client connection, connectString=" + connectString
             + " sessionTimeout=" + sessionTimeout
             + " watcher=" + watcher);

    if (clientConfig == null) {
        clientConfig = new ZKClientConfig();
    }
    this.clientConfig = clientConfig;
    watchManager = defaultWatchManager();
    watchManager.defaultWatcher = watcher;
    ConnectStringParser connectStringParser = new ConnectStringParser(connectString);
    hostProvider = aHostProvider;

    cnxn = createConnection(
        connectStringParser.getChrootPath(),
        hostProvider,
        sessionTimeout,
        this,
        watchManager,
        getClientCnxnSocket(),
        canBeReadOnly);
    cnxn.start();
}

// @VisibleForTesting
protected ClientCnxn createConnection(
    String chrootPath,
    HostProvider hostProvider,
    int sessionTimeout,
    ZooKeeper zooKeeper,
    ClientWatchManager watcher,
    ClientCnxnSocket clientCnxnSocket,
    boolean canBeReadOnly) throws IOException {
    return new ClientCnxn(
        chrootPath,
        hostProvider,
        sessionTimeout,
        this,
        watchManager,
        clientCnxnSocket,
        canBeReadOnly);
}

到此,關于“zk client會話過程是怎樣的”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

標題名稱:zkclient會話過程是怎樣的
分享路徑:http://www.rwnh.cn/article34/gcgsse.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、軟件開發(fā)、自適應網(wǎng)站、域名注冊、做網(wǎng)站、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
蒙阴县| 七台河市| 淮阳县| 衡水市| 洛川县| 长宁区| 绥江县| 永顺县| 奉节县| 漳州市| 江都市| 锡林浩特市| 云南省| 石河子市| 克拉玛依市| 富蕴县| 弥渡县| 万安县| 青龙| 夏河县| 马鞍山市| 三穗县| 姜堰市| 科尔| 宁河县| 江阴市| 莱阳市| 攀枝花市| 中江县| 勐海县| 台东市| 兴城市| 博客| 日土县| 济宁市| 个旧市| 固阳县| 姜堰市| 西宁市| 新乡市| 嘉义市|