码迷,mamicode.com
首页 > 其他好文 > 详细

zookeeper源码之请求协议

时间:2018-02-19 11:35:32      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:body   一个   stream   ons   nis   auth   tab   tar   存在   

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源码之请求协议

标签:body   一个   stream   ons   nis   auth   tab   tar   存在   

原文地址:https://www.cnblogs.com/zhangwanhua/p/8426054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!