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. go语言常用函数:make

    创建数组切片 Go语言提供的内置函数make()可以用于灵活地创建数组切片.创建一个初始元素个数为5的数组切片,元素初始值为0: mySlice1 := make([]int, 5) 创建一个初始元素 ...

  2. Electron笔记

    一个能让你用Web技术开发桌面应用的开源项目.这里做一个笔记(非正式文章): 官网地址:http://electron.atom.io/ API相关 Electron提供的主进程接口.渲染进程接口.共 ...

  3. 升级tomcat7的运行日志框架到log4j2,可以打进kafka

    为了让web application能随意使用logging组件而不受web容器自身的影响,从tomcat 6.0开始,tomact默认使用的是java.util.logging framework来 ...

  4. 关于iOS中的时间

    两类 绝对时间 [NSDate date].CFAbsoluteTimeGetCurrent(),或者gettimeofday(). 返回的是从某一个时刻开始,度过的秒数.会随着用户设置的系统时间更改 ...

  5. 【代码笔记】iOS-标题2个图标,点击的时候,页面跳转

    一,效果图. 二,工程图. 三,代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  6. NSoperation用法详解及与GCD的比较

    NSInvocationOperation // 基于一个对象和selector来创建操作.如果你已经有现有的方法来执行需要的任务,就可以使用这个类 NSInvocationOperation * o ...

  7. Web应用程序系统的多用户权限控制设计及实现-页面模块【9】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-页面模块.页面模块涉及到的数据表为页面表. 1.1页面域 为了更规范和方便后期系统的二次开发和维护 ...

  8. 快速提升word文档编写质量

    1.调整样式顺序

  9. MySQL主主双机负载均衡

    MySQL双机主主架构,其上辅以负载均衡设备,可以实现mysql数据库的负载均衡高性能和高可用性,负载均衡设备可以根据算法将数据库操作的负 载平均分到两台MySQL服务器上,这样对于每台服务器来说工作 ...

  10. php示例代码之 使用PHP的MySQL标准函数

    <?php //连接参数 $host="localhost"; $user="root"; $pwd="111111"; $db=&q ...