zookeeper C API

Zookeeper C API学习总结 Zookeeper C API客户端使用C语言开发,zookeeper提供了两个库,zookeeper_st(单线程库)以及zookeeper_mt(多线程库)。zookeeper_st提供了异步API和集成在应用程序用来实现事件循环的回调函数,该库是为了支持pthread库不支持或是不稳定的系统而存在。使用过程中需要通过zoo_interest以及zoo_process实现事件处理以及通知机制。 阅读详情
typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);
watch回调函数,两种watch事件通知方式:
1.legacy:预先实现watch回调函数并将函数指针传入zookeeper_init,然后使用其他api设置watch。  (即在init函数中设置watcher,然后后边调用时,设置整型值watch来表明使用或者不使用watcher)
2.watcher object:一个函数指针和一个watcher上下文指针。watch触发时,两者结合调用。使用此类型,需使用'w'前缀api,如zoo_awexists、zoo_wget等.(直接使用回调函数)



zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout, const clientid_t *clientid, void *context, int flags);
创建与ZooKeeper服务端通信的句柄和对应于此句柄的会话。会话的创建过程是异步的,收到ZOO_CONNECTED_STATE状态事件后,确认会话成功建立。 

int zookeeper_close(zhandle_t *zh);
关闭句柄,释放资源。调用函数后,会话将不可用,函数返回前会将未发送完毕的请求发送完,所以可能会引起阻塞。
对一个句柄来说,这个方法只许调用一次,调用多次将产生不确定的结果。对于调用过此方法的句柄,其他句柄操作也将产生不确定的结果。

const clientid_t *zoo_client_id(zhandle_t *zh);
返回客户端会话id,仅在与服务端连接正常时有效

int zoo_recv_timeout(zhandle_t *zh);
返回会话超时时间,仅在于服务端连接正常时有效,该值在与服务器重连后可能改变

const void *zoo_get_context(zhandle_t *zh);
返回句柄上下文

void zoo_set_context(zhandle_t *zh, void *context);
设置句柄上下文

watcher_fn zoo_set_watcher(zhandle_t *zh,watcher_fn newFn);
设置watch回调,返回之前的watch回调

struct sockaddr* zookeeper_get_connected_host(zhandle_t *zh, struct sockaddr *addr, socklen_t *addr_len);
返回服务端的网络地址(sockaddr结构),仅在与服务端连接正常是有效

int zookeeper_interest(zhandle_t *zh, int *fd, int *interest, struct timeval *tv);
暂时不太理解,可能是返回zookeeper在监听某个fd的读或者写

int zookeeper_process(zhandle_t *zh, int events);
暂时不太理解,通知zookeeper监听的事件发生了

typedef void (*void_completion_t)(int rc, const void *data);
函数类型定义,异步调用或连接断开或连接超时执行的回调类型

typedef void (*stat_completion_t)(int rc, const struct Stat *stat, const void *data);
同上,有返回值

typedef void (*data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data);
同上,返回详细数据

typedef void (*strings_completion_t)(int rc, const struct String_vector *strings, const void *data);
同上

typedef void (*strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data);
同上

typedef void (*string_completion_t)(int rc, const char *value, const void *data);
同上

typedef void (*acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);
同上

int zoo_state(zhandle_t *zh);
返回句柄状态

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); 
创建一个之前不存在的节点。如果设置ZOO_EPHEMERAL,客户端会话失效,节点将自动删除;如果设置ZOO_SEQUENCE,一个唯一的自动增加的序列号附加到路径名,序列号宽度是10个数字的宽度,不足用0填充

int zoo_adelete(zhandle_t *zh, const char *path, int version, void_completion_t completion, const void *data);
删除一个节点

int zoo_aexists(zhandle_t *zh, const char *path, int watch, stat_completion_t completion, const void *data);
检查一个节点是否存在

int zoo_awexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, stat_completion_t completion, const void *data);
检查一个节点是否存在,它允许指定一个watcher对象(一个函数指针watcher和对应的上下文watcherCtx),在watch解除时,此函数会调用,watcherCtx作为watcher的传入参数

int zoo_aget(zhandle_t *zh, const char *path, int watch, data_completion_t completion, const void *data);
获取节点数据(legacy方式)。completion是回调函数,其rc参数可能是以下参数:ZOK-完成,ZNONODE-节点不存在,ZNOAUTH-客户端无权限

int zoo_awget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, data_completion_t completion, const void *data);
获取节点数据(watcher object方式)。

int zoo_aset(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, stat_completion_t completion, const void *data);
设置节点数据

int zoo_aget_children(zhandle_t *zh, const char *path, int watch, strings_completion_t completion, const void *data);
获取子节点列表(legacy)

int zoo_awget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_completion_t completion, const void *data);
获取子节点列表(watcher object)

int zoo_aget_children2(zhandle_t *zh, const char *path, int watch, strings_stat_completion_t completion, const void *data);
获取子节点列表,3.3.0版本加入(legacy)

int zoo_awget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_stat_completion_t completion, const void *data);
获取子节点列表,3.3.0版本加入(watcher object)

int zoo_async(zhandle_t *zh, const char *path, string_completion_t completion, const void *data);
Flush leader channel. 暂时不明确

int zoo_aget_acl(zhandle_t *zh, const char *path, acl_completion_t completion, const void *data);
获取节点的ACL。ACL描述了操作该节点所需具备的条件,即哪些人(id)具备哪些权限后才允许对节点执行哪些操作。

int zoo_aset_acl(zhandle_t *zh, const char *path, int version, struct ACL_vector *acl, void_completion_t, const void *data);
设置节点的ACL

int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results, void_completion_t, const void *data);
以原子方式执行一系列操作

const char* zerror(int c);
返回错误信息

int zoo_add_auth(zhandle_t *zh, const char* scheme, const char* cert, int certLen, void_completion_t completion, const void *data);
为应用程序指定证书。调用此函数用于认证的证书。服务端用scheme指定的安全服务对客户端连接进行认证。
如果认证失败,将与服务端断开连接,watcher触发,状态码是ZOO_AUTH_FAILED_STATE

int is_unrecoverable(zhandle_t *zh);
检查zookeeper连接是否可恢复

void zoo_set_debug_level(ZooLogLevel logLevel);
设置调试级别

void zoo_set_log_stream(FILE* logStream);
设置用于记录日志的文件流。默认使用stderr。若logStream为NULL,则使用默认值stderr。

void zoo_deterministic_conn_order(int yesOrNo);
用于启用或停用quarum端点的随机化排序,通常仅在测试时使用。
如果非0,使得client连接到quarum端按照被初始化的顺序。
如果是0,zookeeper_init将变更端点顺序,使得client连接分布在更优的端点上。

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);
同步建立节点

int zoo_delete(zhandle_t *zh, const char *path, int version);
同步删除节点

int zoo_exists(zhandle_t *zh, const char *path, int watch, struct Stat *stat);
同步检查节点是否存在

int zoo_wexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct Stat *stat);
同步检查节点是否存在(watcher object)

int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer, int* buffer_len, struct Stat *stat);
同步获取节点数据(legacy)

int zoo_wget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, char *buffer, int* buffer_len, struct Stat *stat);
同步获取节点数据(watcher object)

int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version);
同步设置节点数据

int zoo_set2(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, struct Stat *stat);
同步设置节点数据并返回当前节点的stat信息

int zoo_get_children(zhandle_t *zh, const char *path, int watch, struct String_vector *strings);
同步获取子节点列表(legacy)

int zoo_wget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings);
同步获取子节点列表(watcher object)

int zoo_get_children2(zhandle_t *zh, const char *path, int watch, struct String_vector *strings, struct Stat *stat);
同步获取子节点列表并返回当前节点的stat信息(legacy),3.3.0版本加入

int zoo_wget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings, struct Stat *stat);
同步获取子节点列表并返回当前节点的stat信息(watcher object),3.3.0版本加入

int zoo_get_acl(zhandle_t *zh, const char *path, struct ACL_vector *acl, struct Stat *stat);
同步获取节点ACL

int zoo_set_acl(zhandle_t *zh, const char *path, int version, const struct ACL_vector *acl);
同步设置节点ACL

int zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results);
同步以原子方式执行一系列操作


说明: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实例 之前一直用zookeeper的java API,最近要用C开发,所以看了C的API及实现 使用zookeeper C API 的步骤: (1)安装zookeeper,直接下载,解压,配置文件即可 (2)安装C API 进入./zookeeper/src/c目录 ./configure make make install (3)编写调用函数,可以参考下面的例子 (4)编译的时候注意 阅读详情

相关推荐

zookeeper C API 完整运行实例

介绍下每个组件代码流摘要 Master: 1、获取leadership前 2、尝试创建主znode 3、如果通过,则获取leadership 4、连接丢失后,需要检查znode是否存在以及谁拥有它 5、一旦确定他人拥有它,Watch主znode 6、获取leadership后 7、Get workers 8、在worker list上设置一个watcher 9、检查

小麒麟的成长之路 3620

Zookeeper C API之接口描述

Zookeeper C API接口大部分以zoo_开头,少量接口以zookeeper_开头。 除了初始化/销毁句柄、设置日志等级/日志流以及一些辅助功能的API外,Zookeeper C API接口分为同步接口和异步接口:同步接口以zoo_开头、异步接口以zoo_a开头。 1、初始化/销毁Zookeeper句柄 初始化Zookeeper句柄(zhandle_t) 原型: ZOOAPI zhand...

qq_41688455的博客 2320

linux下使用zookeeper C API开发zookeeper应用的方法介绍

1、配置开发环境构建ZooKeeper本地库的最简单的方式是使用ant构建工具。在你解压缩的ZooKeeper发行包的目录中,有一个名为build.xml的文件,该文件包含了ant构建所需的构建步骤。你还需要用到automake、autoconf和cppunit这些工具,如果你使用Linux操作系统,需要确保这些工具在你的主机中可用。一旦安装了所有必需的工具,你可以采用以下方式构建ZooKeepe

小麒麟的成长之路 4398

Zookeeper C 异步 API 介绍

在讲解 Zookeeper 异步 API ,除了监视器回调函数以外,还有其他 7 种回调函数,他们通常在异步 API 调用结束或 Zookeeper  客户端失去连接时被调用。根据回调函数返回参数(即函数的输出参数)的类型不同分为以下几类:返回 void 类型的回调函数,返回 Stat 结构的回调函数,返回字符串的回调函数,返回数据的回调函数,返回字符串列表(a list of string)的回...

swartz_lubel的专栏 1438

Zookeeper客户端调用库(已编译跨平台Release64位)及源码

Zookeeper客户端调用库(已编译跨平台Release64位)及源码,如需重新编译,进入源码zookeeper-3.4.14\zookeeper-client\zookeeper-client-c中,按照cmake的常规步骤即可(注意:在Linux平台下,CMakeLists.txt中的set(DEFAULT_WANT_CPPUNIT ON),需要把ON设置为OFF,否则可能会报错)

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

协调服务zookeeper原理(c++)

协调服务zookeeper

m0_53370914的博客 1287

CentOS8安装NVIDIA显卡驱动、CUDA和Anaconda

CentOS8安装NVIDIA显卡驱动和CUDA 参考:CentOS nvidia+cuda+cudnn 安装 安装英伟达显卡驱动 1、检查是否安装了NVIDIA的GPU(硬件层面): lspci | grep -i nvidia 2、安装GCC、kernal组件、dkms等 sudo yum install gcc sudo yum install gcc-c++ sudo yum -y install kernel-devel sudo yum -y install kernel-headers s

智慧的旋风的博客 1万+

Zookeeper C API 官方示例程序

这个程序不可执行,但是可以从中学到利用C API编程时的一些启示。 #include "zookeeper.h" #include "proto.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #ifndef WIN32 #include <sys/time.h> #i...

qq_40123329的博客 657

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

高通QNN SDK实战:从PyTorch模型到Snapdragon设备的完整部署指南

本文提供了一份详尽的高通QNN SDK实战指南,手把手教你如何将PyTorch模型高效部署到Snapdragon设备。内容涵盖从环境搭建、模型转换、量化优化到多后端部署与性能评测的完整流程,旨在帮助移动AI开发者打通模型落地的“最后一公里”,充分发挥高通平台的硬件加速潜力。

pz8901234的博客 1283

Zookeeper C API学习笔记(ubuntu)

目录 一、zookeeper安装(包括C库的安装) 二、需要的头文件 三、需要的动态库 四、C API 1.连接到zookeeper服务器 2.创建节点 3.订阅节点 4.订阅子节点 5.获取子节点列表 6.获取节点数据 附录 一、zookeeper安装(包括C库安装) 1.下载zookeeper包 下载链接:http://archive.apache.org/dist...

djqueen的博客 1万+

异常数据处理——3σ原则、箱线图

异常数据处理——3σ原则、箱线图 用不包括异常值的剩余数据的均值替换、删除DataFrame中某列有异常值的整行等方法

杨老师的小跟班(*∩_∩*) 9033

zookeeper的C API

这部分可以参考: 华科的一个校友,整理的C的API,十分详尽,如果不想阅读zookeeper网站上的API文档,可以直接参考这个: http://www.cnblogs.com/haippy/archive/2013/02/21/2919365.html 总共有8篇文章,着实不错,,, 转载于:https://www.cnblogs.com/lpshou/archive/2013/06/1...

weixin_30628801的博客 78

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上 参考了好多大神博客,自己写的过程中发现,还有些小细节。 一、打开Notepad写需要的字 另存为 UTF-16LE 也就是Unicode。 二、打开FontCvtST转 删掉所有字 读入test.txt里的字 选择刚才的test.txt 另存为.c文件 改个英文名 复制到RTOS的例程文件夹下 三、打开GUIBuilder 画一个这样的 保存之前要注意路径配置要在当前位置,否则存不上 生成的D

weixin_41376117的博客 1935

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

Zookeeper C API 指南一(准备工作)

发现几篇写的比较好的博客,转载来看看 目录 Zookeeper C API 指南一(准备工作) Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍) Zookeeper C API 指南三(回调函数) Zookeeper C API 指南四(C API 概览) Zookeeper C API 指南五(同步 API 介绍) Zookeeper C API 指南六(异步 API 介绍) Zookeeper C API 指南七(Zookeeper 辅助 API 介

alpha_love的博客 241

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429 可以使用一些编码字符来制作URI,以访问WEB-INF目录的内容和/或绕过一些安全限制。默认合规模式允许带有包含 %u002e 段的 URI 的请求访问WEB-INF目录中的受保护资源。

qq_51577576的博客 3208

Zookeeper C API 指南

以前自己的博客中转载、翻译或写过(不过自己才疏学浅,写的不好)一些 Zookeeper 方面的文章,但是都没有涉及到 Zookeeper C API 的内容,今天的这篇博客是我农历新年的第一篇技术博客,我想详细讲讲 Zookeeper C API 的使用规则和示例,算是把以前的旧帐还上吧 :-) Zookeeper 官方页面上提供了一些编程指南 和 API 文档,不过大部分都是 Java

phymat.nico的专栏 768

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper客户端库有两种语言:Java和C。本文将介绍使用C/C++语言客户端库的编译安装和使用入门。

一念之间 一心向阳 2271

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

install and use zookeeper C client API

1. install zookeeper in cluster 参考前面的STORM安装http://www.cnblogs.com/Torstan/archive/2013/03/07/2948319.html 2. install zookeerper C client API cd zookeeper-3.3.5/src/c autoreconf -if If this happ...

weixin_30716141的博客 80

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

zookeeper使用(二) C API 安装

zookeeper C API 安装 参考网址:http://www.cnblogs.com/haippy/archive/2013/02/21/2919365.html 1、安装zookeeper 请参考我前面写的博客:http://blog.youkuaiyun.com/wangdamingll/article/details/53156982 2、zookeeper C API的安装...

wangdamingll的博客 1014
上一篇: 《accelerated c++》第九章---设计类
下一篇: Ice异步程序设计----AMI,AMD
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值