2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑

接上一篇《Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍)》,本文重点介绍 Zookeeper C API 中的各种回调函数。

Zookeeper C API 中各种回调函数简介

在具体介绍 Zookeeper C API 之前,首先介绍一下 Zookeeper C API 中的各种回调函数的原型:

监视函数(watch function)原型

typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);

监视函数原型的各个参数解释如下:

zh zookeeper 句柄(handle)
type 事件类型(event type). *_EVENT 常量之一.
state 连接状态(connection state). 状态值为 *_STATE 常量之一.
path 触发监视事件的 znode 节点的路径,若为 NULL,则事件类型为 ZOO_SESSION_EVENT
watcherCtx 监视器上下文(watcher context).

其他回调函数的原型

Zookeeper 中还有几种在异步 API(一般以 zoo_a*开头的函数) 中使用的回调函数,根据回调函数处理异步函数返回值类型的不同分为以下几类:处理返回 void 类型的回调函数,处理返回 Stat 结构的回调函数,处理返回字符串的回调函数,处理返回数据的回调函数,处理返回字符串列表(a list of string)的回调函数,同时处理返回字符串列表(a list of string)和 Stat 结构的回调函数,以及处理返回 ACL 信息的回调函数,它们分别如下:

// 处理返回 void 类型的回调函数
typedef void(* void_completion_t)(int rc, const void *data); // 处理返回 Stat 结构的回调函数
typedef void(* stat_completion_t)(int rc, const struct Stat *stat, const void *data); // 处理返回字符串的回调函数
typedef void(* string_completion_t)(int rc, const char *value, const void *data); // 处理返回数据的回调函数
typedef void(* data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data); // 处理返回字符串列表(a list of string)的回调函数
typedef void(* strings_completion_t)(int rc, const struct String_vector *strings, const void *data); // 同时处理返回字符串列表(a list of string)和 Stat 结构的回调函数
typedef void(* strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data); // 处理以及返回 ACL 信息的回调函数
typedef void(* acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);

下面一一介绍上述几种回调函数的用法:

  • 处理返回 void 类型的回调函数
typedef void(* void_completion_t)(int rc, const void *data)

该回调函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功) 
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 处理返回 Stat 结构的回调函数
typedef void(* stat_completion_t)(int rc, const struct Stat *stat, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
stat 指向与该 znode 节点相关的 Stat 信息,如果返回非 0 值(即异步调用函数出错),stat 所指向的区域是未定义的,开发者不负责释放 stat 所指向的内存空间。
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 处理返回字符串的回调函数
typedef void(* string_completion_t)(int rc, const char *value, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
value 返回的字符串
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 处理返回数据的回调函数
typedef void(* data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
value 异步调用的返回值,如果返回非 0 值(即异步调用函数出错),value 所指向的区域是未定义的,开发者不负责释放 value 所指向的内存空间。
value_len 返回 value 数据字节数(bytes)
stat 指向与该 znode 节点相关的 Stat 信息,如果返回非 0 值(即异步调用函数出错),stat 所指向的区域是未定义的,开发者不负责释放 stat 所指向的内存空间。
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 处理返回字符串列表(a list of string)的回调函数
typedef void(* strings_completion_t)(int rc, const struct String_vector *strings, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
strings 指向包含了某 znode 节点的所有子节点名称列表的结构,如果返回非 0 值(即异步调用函数出错),strings 所指向的区域是未定义的,开发者不负责释放 strings 所指向的内存空间。
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 同时处理返回字符串列表(a list of string)和 Stat 结构的回调函数
typedef void(* strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
strings 指向包含了某 znode 节点的所有子节点名称列表的结构,如果返回非 0 值(即异步调用函数出错),strings 所指向的区域是未定义的,开发者不负责释放 strings 所指向的内存空间。
stat 指向与该 znode 节点相关的 Stat 信息,如果返回非 0 值(即异步调用函数出错),stat 所指向的区域是未定义的,开发者不负责释放 stat 所指向的内存空间。
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。
  • 处理返回 ACL 信息的回调函数
typedef void(* acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data)

该函数一般在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。

rc 异步函数调用返回的错误码,连接丢失/超时将触发该原型函数(此处指具有该函数原型的回调函数,下同)的调用,并且错误码为 ZCONNECTIONLOSS --  Zookeeper 客户端与服务器端的连接丢失,或者 ZOPERATIONTIMEOUT -- 连接超时;而与数据相关的事件也会触发该原型函数的调用,同时置相应的错误码,具体见后文(0 代异步函数调用成功)
acl 指向包含某 znode 节点 ACL 信息的指针,如果返回非 0 值(即异步调用函数出错),acl 所指向的区域是未定义的,开发者不负责释放 acl 所指向的内存空间。
stat 指向与该 znode 节点相关的 Stat 信息,如果返回非 0 值(即异步调用函数出错),stat 所指向的区域是未定义的,开发者不负责释放 stat 所指向的内存空间。
data 由调用者传入的指针,调用者可以通过该指针向回调函数传入自定义的参数,开发人员应负责此指针所指向内存的释放。

至此,所有的回调函数均已介绍完毕,下一节将介绍 Zookeeper C API 分类和基本 API 的使用,见第四讲《Zookeeper C API 指南四(C API 概览)》

Zookeeper C API 指南三(回调函数)(转)的更多相关文章

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

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

  2. Zookeeper C API 指南一(转)

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

  3. arcgis api for js回调函数如何等待同步

    arcgis js开发往往会遇到同步异步的问题,有可能在上一步使用了arcgis js模块回调函数,下一步需要用上一步回调函数的结果,但是因为JavaScript是异步执行的,它并不会等待上一步的回调 ...

  4. Node.js:创建应用+回调函数(阻塞/非阻塞)+事件循环

    一.创建应用 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi.从这个角度看,整个"接收 HTTP ...

  5. Node js 安装+回调函数+事件

    /* 从网站 https://nodejs.org/zh-cn/ 下载 这里用的 9.4.0 版本 下载完安装 安装目录是 D:\ApacheServer\node 一路默认安装 安装后打开cmd命令 ...

  6. node基础06:回调函数

    1.Node异步编程 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,No ...

  7. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  8. Javascript-回调函数浅谈

    回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...

  9. Node.js 学习(四)Node.js 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

随机推荐

  1. 2015年免费的25款 WordPress 网站模板

    2015年 WordPress 插件和主题的数量继续在增长.这一年,我们可以期待WP主题引入一些新的技术,从背景,自适应响应式图像到从背景图片中提取主色. 本文包含25款最近发布的 WordPress ...

  2. 原生JS:Object对象详细参考

    Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...

  3. 高性能的JavaScript库---Lodash

    上周在仿做Nodejs社区的时候,遇到了lodash这个javascript库,很惭愧,那也是我第一次听说lodash.人嘛,对于新鲜的事物总是会或多或少感到些好奇的,于是就毫不犹豫地去lodash官 ...

  4. Atitit.木马病毒强制强行关闭360 360tray.exe的方法

    Atitit.木马病毒强制强行关闭360 360tray.exe的方法 1. taskkill /im 进程名称1 2. 用 wmic process where name="进程名称&qu ...

  5. mysql不同版本和存储引擎选型的验证

    Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...

  6. 浅谈FloatingActionButton(悬浮按钮)

    一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...

  7. IOS开发证书显示“此证书的签发者无效”解决方法

    今天早上同事说咱们的证书无法使用了,显示“此证书的签发者无效”.一开始以为谁误操作了证书,查看后发现所有证书都无效了.查了会才发下原来是Apple Worldwide Developer Relati ...

  8. __block和__weak的区别

    API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...

  9. windows svn 上传后 自动部署 到web目录下

    第一步 把web目录设置为工作目录 "D:\Program Files (x86)\VisualSVN Server\bin\svn.exe" upgrade "D:\y ...

  10. VC对ScrollView的调整

    VC对ScrollView的调整 automaticallyAdjustsScrollViewInsets automaticallyAdjustsScrollViewInsets是ViewContr ...