zookeeper源碼之請求協議
阿新 • • 發佈:2018-02-19
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源碼之請求協議