Zookeeper C API 指南三(回调函数)(转)
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 指南三(回调函数)(转)的更多相关文章
- Zookeeper C API 指南四(C API 概览)(转)
上一节<Zookeeper C API 指南三(回调函数)>重点讲了 Zookeeper C API 中各种回调函数的原型,本节将切入正题,正式讲解 Zookeeper C API.相信大 ...
- Zookeeper C API 指南一(转)
Zookeeper 监视(Watches) 简介 Zookeeper C API 的声明和描述在 include/zookeeper.h 中可以找到,另外大部分的 Zookeeper C API 常量 ...
- arcgis api for js回调函数如何等待同步
arcgis js开发往往会遇到同步异步的问题,有可能在上一步使用了arcgis js模块回调函数,下一步需要用上一步回调函数的结果,但是因为JavaScript是异步执行的,它并不会等待上一步的回调 ...
- Node.js:创建应用+回调函数(阻塞/非阻塞)+事件循环
一.创建应用 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi.从这个角度看,整个"接收 HTTP ...
- Node js 安装+回调函数+事件
/* 从网站 https://nodejs.org/zh-cn/ 下载 这里用的 9.4.0 版本 下载完安装 安装目录是 D:\ApacheServer\node 一路默认安装 安装后打开cmd命令 ...
- node基础06:回调函数
1.Node异步编程 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,No ...
- js中的回调函数的理解和使用方法
js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
- Javascript-回调函数浅谈
回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...
- Node.js 学习(四)Node.js 回调函数
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
随机推荐
- Adaptive Backgrounds – jQuery 自适应背景插件
Adaptive Backgrounds 是一款很特别的 jQuery 插件,可以从图像中提取主导颜色并将它应用到它的父元素.这个插件利用 Canvas 元素和 ImageData 对象.需要注意的是 ...
- 使用异步存储提升 Web 应用程序的离线体验
localForage 是一个 JavaScript 库,通过使用简单的.类似 localStorage 风格的 API 实现异步存储,帮助你提升 Web 应用程序的离线经验(通过 IndexedDB ...
- yii redies 不同的工程缓存key的问题
参考这篇文章 基本配置操作: yii main.php中: return array( ... 'components'=>array( 'redis_cache' => array ( ...
- C语言堆栈入门——堆和栈的区别
来看一个网上很流行的经典例子: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc& ...
- MySQL 常见的sql命令
注意事项: 1.sql 使用单引号来环绕文本值(大部分数据库系统也接受双引号).如果是数值,请不要使用引号. 一.数据库 1.创建数据库 CREATE DATABASE lesson ; 创建一个名字 ...
- iOS 用webView加载后台返回的HTML数据
返回数据: <p><b>\U516c\U53f8\U7b80\U4ecb</b></p><p> \U5584\U76c8\U7ba1\ ...
- 关于Linux与windows传递文件乱码问题
linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...
- WPExpress78_update 离线包
http://115.com/lb/5lb7rnbr#Windows Phone SDK update for WP 7.8115网盘礼包码:5lb7rnbr 使用/layout下载的,相信很多朋友已 ...
- 赫夫曼\哈夫曼\霍夫曼编码 (Huffman Tree)
哈夫曼树 给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离 ...
- MapReduce实例-基于内容的推荐(一)
环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:下载的amazon产品共同采购网络元数据(需FQ下载)http://snap.stanford.edu/data/ ...