1. typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);
  2. watch回调函数,两种watch事件通知方式:
  3. 1.legacy:预先实现watch回调函数并将函数指针传入zookeeper_init,然后使用其他api设置watch (即在init函数中设置watcher,然后后边调用时,设置整型值watch来表明使用或者不使用watcher
  4. 2.watcher object:一个函数指针和一个watcher上下文指针。watch触发时,两者结合调用。使用此类型,需使用'w'前缀api,如zoo_awexistszoo_wget等.(直接使用回调函数)
  1.  
  1. zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout, const clientid_t *clientid, void *context, int flags);
  2. 创建与ZooKeeper服务端通信的句柄和对应于此句柄的会话。会话的创建过程是异步的,收到ZOO_CONNECTED_STATE状态事件后,确认会话成功建立。
  3.  
  4. int zookeeper_close(zhandle_t *zh);
  5. 关闭句柄,释放资源。调用函数后,会话将不可用,函数返回前会将未发送完毕的请求发送完,所以可能会引起阻塞。
  6. 对一个句柄来说,这个方法只许调用一次,调用多次将产生不确定的结果。对于调用过此方法的句柄,其他句柄操作也将产生不确定的结果。
  7.  
  8. const clientid_t *zoo_client_id(zhandle_t *zh);
  9. 返回客户端会话id,仅在与服务端连接正常时有效
  10.  
  11. int zoo_recv_timeout(zhandle_t *zh);
  12. 返回会话超时时间,仅在于服务端连接正常时有效,该值在与服务器重连后可能改变
  13.  
  14. const void *zoo_get_context(zhandle_t *zh);
  15. 返回句柄上下文
  16.  
  17. void zoo_set_context(zhandle_t *zh, void *context);
  18. 设置句柄上下文
  19.  
  20. watcher_fn zoo_set_watcher(zhandle_t *zh,watcher_fn newFn);
  21. 设置watch回调,返回之前的watch回调
  22.  
  23. struct sockaddr* zookeeper_get_connected_host(zhandle_t *zh, struct sockaddr *addr, socklen_t *addr_len);
  24. 返回服务端的网络地址(sockaddr结构),仅在与服务端连接正常是有效
  25.  
  26. int zookeeper_interest(zhandle_t *zh, int *fd, int *interest, struct timeval *tv);
  27. 暂时不太理解,可能是返回zookeeper在监听某个fd的读或者写
  28.  
  29. int zookeeper_process(zhandle_t *zh, int events);
  30. 暂时不太理解,通知zookeeper监听的事件发生了
  31.  
  32. typedef void (*void_completion_t)(int rc, const void *data);
  33. 函数类型定义,异步调用或连接断开或连接超时执行的回调类型
  34.  
  35. typedef void (*stat_completion_t)(int rc, const struct Stat *stat, const void *data);
  36. 同上,有返回值
  37.  
  38. typedef void (*data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data);
  39. 同上,返回详细数据
  40.  
  41. typedef void (*strings_completion_t)(int rc, const struct String_vector *strings, const void *data);
  42. 同上
  43.  
  44. typedef void (*strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data);
  45. 同上
  46.  
  47. typedef void (*string_completion_t)(int rc, const char *value, const void *data);
  48. 同上
  49.  
  50. typedef void (*acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);
  51. 同上
  52.  
  53. int zoo_state(zhandle_t *zh);
  54. 返回句柄状态
  55.  
  56. int zoo_acreate(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, string_completion_t completion, const void *data);
  57. 创建一个之前不存在的节点。如果设置ZOO_EPHEMERAL,客户端会话失效,节点将自动删除;如果设置ZOO_SEQUENCE,一个唯一的自动增加的序列号附加到路径名,序列号宽度是10个数字的宽度,不足用0填充
  58.  
  59. int zoo_adelete(zhandle_t *zh, const char *path, int version, void_completion_t completion, const void *data);
  60. 删除一个节点
  61.  
  62. int zoo_aexists(zhandle_t *zh, const char *path, int watch, stat_completion_t completion, const void *data);
  63. 检查一个节点是否存在
  64.  
  65. int zoo_awexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, stat_completion_t completion, const void *data);
  66. 检查一个节点是否存在,它允许指定一个watcher对象(一个函数指针watcher和对应的上下文watcherCtx),在watch解除时,此函数会调用,watcherCtx作为watcher的传入参数
  67.  
  68. int zoo_aget(zhandle_t *zh, const char *path, int watch, data_completion_t completion, const void *data);
  69. 获取节点数据(legacy方式)。completion是回调函数,其rc参数可能是以下参数:ZOK-完成,ZNONODE-节点不存在,ZNOAUTH-客户端无权限
  70.  
  71. int zoo_awget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, data_completion_t completion, const void *data);
  72. 获取节点数据(watcher object方式)。
  73.  
  74. int zoo_aset(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, stat_completion_t completion, const void *data);
  75. 设置节点数据
  76.  
  77. int zoo_aget_children(zhandle_t *zh, const char *path, int watch, strings_completion_t completion, const void *data);
  78. 获取子节点列表(legacy)
  79.  
  80. int zoo_awget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_completion_t completion, const void *data);
  81. 获取子节点列表(watcher object)
  82.  
  83. int zoo_aget_children2(zhandle_t *zh, const char *path, int watch, strings_stat_completion_t completion, const void *data);
  84. 获取子节点列表,3.3.0版本加入(legacy)
  85.  
  86. int zoo_awget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_stat_completion_t completion, const void *data);
  87. 获取子节点列表,3.3.0版本加入(watcher object)
  88.  
  89. int zoo_async(zhandle_t *zh, const char *path, string_completion_t completion, const void *data);
  90. Flush leader channel. 暂时不明确
  91.  
  92. int zoo_aget_acl(zhandle_t *zh, const char *path, acl_completion_t completion, const void *data);
  93. 获取节点的ACLACL描述了操作该节点所需具备的条件,即哪些人(id)具备哪些权限后才允许对节点执行哪些操作。
  94.  
  95. int zoo_aset_acl(zhandle_t *zh, const char *path, int version, struct ACL_vector *acl, void_completion_t, const void *data);
  96. 设置节点的ACL
  97.  
  98. int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results, void_completion_t, const void *data);
  99. 以原子方式执行一系列操作
  100.  
  101. const char* zerror(int c);
  102. 返回错误信息
  103.  
  104. int zoo_add_auth(zhandle_t *zh, const char* scheme, const char* cert, int certLen, void_completion_t completion, const void *data);
  105. 为应用程序指定证书。调用此函数用于认证的证书。服务端用scheme指定的安全服务对客户端连接进行认证。
  106. 如果认证失败,将与服务端断开连接,watcher触发,状态码是ZOO_AUTH_FAILED_STATE
  107.  
  108. int is_unrecoverable(zhandle_t *zh);
  109. 检查zookeeper连接是否可恢复
  110.  
  111. void zoo_set_debug_level(ZooLogLevel logLevel);
  112. 设置调试级别
  113.  
  114. void zoo_set_log_stream(FILE* logStream);
  115. 设置用于记录日志的文件流。默认使用stderr。若logStreamNULL,则使用默认值stderr
  116.  
  117. void zoo_deterministic_conn_order(int yesOrNo);
  118. 用于启用或停用quarum端点的随机化排序,通常仅在测试时使用。
  119. 如果非0,使得client连接到quarum端按照被初始化的顺序。
  120. 如果是0zookeeper_init将变更端点顺序,使得client连接分布在更优的端点上。
  121.  
  122. int zoo_create(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, char *path_buffer, int path_buffer_len);
  123. 同步建立节点
  124.  
  125. int zoo_delete(zhandle_t *zh, const char *path, int version);
  126. 同步删除节点
  127.  
  128. int zoo_exists(zhandle_t *zh, const char *path, int watch, struct Stat *stat);
  129. 同步检查节点是否存在
  130.  
  131. int zoo_wexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct Stat *stat);
  132. 同步检查节点是否存在(watcher object)
  133.  
  134. int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer, int* buffer_len, struct Stat *stat);
  135. 同步获取节点数据(legacy)
  136.  
  137. int zoo_wget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, char *buffer, int* buffer_len, struct Stat *stat);
  138. 同步获取节点数据(watcher object)
  139.  
  140. int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version);
  141. 同步设置节点数据
  142.  
  143. int zoo_set2(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, struct Stat *stat);
  144. 同步设置节点数据并返回当前节点的stat信息
  145.  
  146. int zoo_get_children(zhandle_t *zh, const char *path, int watch, struct String_vector *strings);
  147. 同步获取子节点列表(legacy)
  148.  
  149. int zoo_wget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings);
  150. 同步获取子节点列表(watcher object)
  151.  
  152. int zoo_get_children2(zhandle_t *zh, const char *path, int watch, struct String_vector *strings, struct Stat *stat);
  153. 同步获取子节点列表并返回当前节点的stat信息(legacy),3.3.0版本加入
  154.  
  155. int zoo_wget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings, struct Stat *stat);
  156. 同步获取子节点列表并返回当前节点的stat信息(watcher object),3.3.0版本加入
  157.  
  158. int zoo_get_acl(zhandle_t *zh, const char *path, struct ACL_vector *acl, struct Stat *stat);
  159. 同步获取节点ACL
  160.  
  161. int zoo_set_acl(zhandle_t *zh, const char *path, int version, const struct ACL_vector *acl);
  162. 同步设置节点ACL
  163.  
  164. int zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results);
  165. 同步以原子方式执行一系列操作

说明:keeper C API 大部分接口可以根据同步和异步特性分为两类,同步接口以 zoo_* 开头,异步接口以则以 zoo_a* 开头。以w开头的函数表明使用watcher回调函数而不是整型watch和zookeeper中注册的watcher函数。

转自 : http://www.cnblogs.com/caosiyang/archive/2012/11/09/2763190.html

zookeeper C API的更多相关文章

  1. (原) 2.1 Zookeeper原生API使用

    本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...

  2. Zookeeper C API 指南四(C API 概览)(转)

    上一节<Zookeeper C API 指南三(回调函数)>重点讲了 Zookeeper C API 中各种回调函数的原型,本节将切入正题,正式讲解 Zookeeper C API.相信大 ...

  3. Zookeeper C API 指南三(回调函数)(转)

    2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑 接上一篇<Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍 ...

  4. Zookeeper C API 指南一(转)

    Zookeeper 监视(Watches) 简介 Zookeeper C API 的声明和描述在 include/zookeeper.h 中可以找到,另外大部分的 Zookeeper C API 常量 ...

  5. zookeeper client API实现(python kazoo 的实现)

    这里主要分析zookeeper client API的实现方式,以python kazoo的实现代码为蓝本进行逻辑分析. 一.代码框架及介绍 API分为同步模式和异步模式.同步模式是在异步模式的基础上 ...

  6. 9. 使用ZooKeeper Java API编程

    ZooKeeper是用Java开发的,3.4.6版本的Java API文档可以在http://zookeeper.apache.org/doc/r3.4.6/api/index.html上找到. Ti ...

  7. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

  8. Hadoop生态圈-zookeeper的API用法详解

    Hadoop生态圈-zookeeper的API用法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.测试前准备 1>.开启集群 [yinzhengjie@s101 ~] ...

  9. zookeeper原生API做java客户端

    简介 本文是使用apache提供的原生api做zookeeper客户端 jar包 zookeeper-3.4.5.jar   Demo package bjsxt.zookeeper.base; im ...

  10. Zookeeper Curator API 使用

    0. 原生 ZOOKEEPER JAVA API  http://www.cnblogs.com/rocky-fang/p/9030438.html 1. 概述 Curator采用cache封装对事件 ...

随机推荐

  1. kafka和flume的对比

    摘要: (1)kafka和flume都是日志系统.kafka是分布式消息中间件,自带存储,提供push和pull存取数据功能.flume分为agent(数据采集器),collector(数据简单处理和 ...

  2. World Cup

    World Cup Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Su ...

  3. docker 基础命令二

    开启/停止/重启 查看当前正在运行容器docker ps 查看包括已经停止的所有容器docker ps -a 显示最新启动的一个容器docker ps -l 新建一个容器运行docker run 启动 ...

  4. nginx 安装三方包重新编译

    sudo -sapt-get source nginxapt-get build-dep nginxwget 'https://github.com/agentzh/chunkin-nginx-mod ...

  5. docker installation on ubuntu

    Ubuntu Docker is supported on these Ubuntu operating systems: Ubuntu Xenial 16.04 (LTS) Ubuntu Trust ...

  6. 在调试安卓系统的时候需要这个 ”adb disable-verity“

    在调试设备的时候.想要对文件进行读写 于是使用adb remount 出现提示. 请使用 ”adb  disable-verity“ 于是使用adb  disable-verity 的命令. 得到如下 ...

  7. go mode

    https://github.com/dominikh/go-mode.el http://blog.altoros.com/golang-part-1-main-concepts-and-proje ...

  8. 【中国剩余定理】 poj 1006

    生理周期  简单模拟 对于超出23 * 28 * 33(21252)时进行求余运算即可. #include<stdio.h> int main() { //freopen("in ...

  9. OpenGL中glFrustum()和gluPerspective()的相互转换

    OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和gl ...

  10. OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

    OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...