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 | 路径 |
实际响应内容传输字节