1. 程式人生 > >zookeeper源碼之請求協議

zookeeper源碼之請求協議

call type ini string style exception try clas ear

Packet

  包,ClientCnxn內部管理請求內容的模塊。由以下幾個模塊組成:

  1.RequestHeader header 請求頭

  2.Record request 請求內容

  3.ByteBuffer bb 實際需要發送的請求內容。

  4.ReplyHeader replyHeader 響應頭

  5.Record response 響應內容

  6.String clientPath

  7.String serverPath

  8.boolean finished

  9.AsyncCallback cb

  10.Object ctx

  11.WatchRegistration watchRegistration

Packet(RequestHeader header, ReplyHeader replyHeader, Record record,
                Record response, ByteBuffer bb,
                WatchRegistration watchRegistration) {
            this.header = header;
            this.replyHeader = replyHeader;
            this.request = record;
            this
.response = response; if (bb != null) { this.bb = bb; } else { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BinaryOutputArchive boa = BinaryOutputArchive .getArchive(baos); boa.writeInt(
-1, "len"); // We‘ll fill this in later header.serialize(boa, "header"); if (record != null) { record.serialize(boa, "request"); } baos.close(); this.bb = ByteBuffer.wrap(baos.toByteArray()); this.bb.putInt(this.bb.capacity() - 4); this.bb.rewind(); } catch (IOException e) { LOG.warn("Ignoring unexpected exception", e); } } this.watchRegistration = watchRegistration; }

請求頭RequestHeader

  包含一下兩部分內容

  1.int xid 包序號,唯一標識一個包。

  2.int type 操作類型

0 notification
1 create 創建節點
2 delete 刪除節點
3 exists 是否存在指定節點
4 getData 獲取節點數據
5 setData 設置節點數據
6 getACL 獲取節點權限
7 setACL 設置節點權限
8 getChildren 獲取子節點
9 sync
11 ping
12 getChildren2
100 auth
101 setWatches
-10 createSession
-11 closeSession
-1 error

請求內容Record

  根據不同的操作類型有不同的請求對象。

請求類型 字段 解釋
ExistsRequest String path 路徑
boolean watch
GetChildrenRequest String path 路徑
boolean watch
CreateRequest String path 路徑
byte[] data 節點值
List<ACL> acl acl值
int flags 節點類型
GetDataRequest String path 路徑
boolean watch
DeleteRequest String path 路徑
int version 版本
SetDataRequest String path 路徑
byte[] data 數據
int version 版本
GetACLRequest String path 路徑
SetACLRequest String path 路徑
List<ACL> acl acl值
int version 版本
SyncRequest String path 路徑

實際請求傳輸字節ByteBuffer bb

名稱 類型
len int
header RequestHeader
request Record

響應頭ReplyHeader

名稱 類型 解釋
xid int 包序號,唯一標識一個包,通過該標識找到對應的客戶端Packet對象
zxid long
err int 是否為異常,如果返回0,則非異常,不為0則異常。

響應內容Record

  根據不同的請求類型有不同的響應內容對象。

返回類型 字段 解釋

GetChildrenResponse

List<String> children 子節點名
CreateResponse String path 路徑
GetDataResponse byte[] data 節點數據
Stat stat 節點狀態信息
SetDataResponse Stat stat 節點的狀態信息
GetACLResponse List<ACL> acl 權限
Stat stat 節點的狀態信息
SetACLResponse Stat stat 節點的狀態信息
SyncResponse String path 路徑

實際響應內容傳輸字節

zookeeper源碼之請求協議