最近研究了一下,zookeeper java版本的客户端,所以做了一下相应的记录,这些主要是记录zookeeper与客户端传输数据的协议的
1.建立连接发送请求消息格式
类型:int,int,long,int,long,byte,byte[16]
含义:
bodysize(消息体长度),protocolVersion(协议版本,默认为0),lastZxidSeen(上次连接zxid,默认为0),
timeOut(连接超时时间单位为ms),sessionId(默认为0),密码长度,passwd密码,默认为16个字节
比如你可以发送如下指令
byte[] connectionRequest = new byte[]{0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
2.建立连接之后的响应数据:
0, 0, 0, 0, 0, 0, 117, 48, 9, 55, -97, 8, -97, -95, -114, -24, 0, 0, 0, 16, -3, -58, -53, -1, 28, -117, -114, -39, 87, 13, 14, -9, -19, -25, -111, 96
int:protocolVersion,int:timeOut,long:sessionId,int:len,string:(size of len)
3.发送获取数据消息体:
0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 7, 47, 116, 97, 108, 101, 110, 116, 0
int:msglen,int:xid,int:handleType,int:strlen,str:/talnet,bool:ifwatch
4.建立连接之后返回消息体格式
0, 0, 0, 98, 0, 0, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 10, 34, 116, 101, 115, 116, 112, 97, 116, 104, 34, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 1, 48, 49, 85, -125, -29, 0, 0, 1, 48, 49, 85, -125, -29, 0, 0, 0, 0, 0, 0, 21, 50
int:msglen,int:xid,long:zxid,int:err,int:strlen,str:"testpath",obj:stat