一、前言
前面分析了Zookeeper客戶端的細(xì)節(jié),接著繼續(xù)學(xué)習(xí)Zookeeper中的一個非常重要的概念:會話。
二、會話
客戶端與服務(wù)端之間任何交互操作都與會話息息相關(guān),如臨時節(jié)點的生命周期、客戶端請求的順序執(zhí)行、Watcher通知機制等。Zookeeper的連接與會話就是客戶端通過實例化Zookeeper對象來實現(xiàn)客戶端與服務(wù)端創(chuàng)建并保持TCP連接的過程.
2.1 會話狀態(tài)
在Zookeeper客戶端與服務(wù)端成功完成連接創(chuàng)建后,就創(chuàng)建了一個會話,Zookeeper會話在整個運行期間的生命周期中,會在不同的會話狀態(tài)中之間進行切換,這些狀態(tài)可以分為CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE等。
一旦客戶端開始創(chuàng)建Zookeeper對象,那么客戶端狀態(tài)就會變成CONNECTING狀態(tài),同時客戶端開始嘗試連接服務(wù)端,連接成功后,客戶端狀態(tài)變?yōu)镃ONNECTED,通常情況下,由于斷網(wǎng)或其他原因,客戶端與服務(wù)端之間會出現(xiàn)斷開情況,一旦碰到這種情況,Zookeeper客戶端會自動進行重連服務(wù),同時客戶端狀態(tài)再次變成CONNCTING,直到重新連上服務(wù)端后,狀態(tài)又變?yōu)镃ONNECTED,在通常情況下,客戶端的狀態(tài)總是介于CONNECTING和CONNECTED之間。但是,如果出現(xiàn)諸如會話超時、權(quán)限檢查或是客戶端主動退出程序等情況,客戶端的狀態(tài)就會直接變更為CLOSE狀態(tài)。