我使用zoo_aget_children(handle, node, 0, callback, context)
为节点设置监视。然后,在callback
:
zhandle_t *_handle = NULL;
const char *path = "/downloader_service";
void init_callback(zhandle_t *handle, int type, int state, const char *path, void *context) {
if (type == ZOO_SESSION_EVENT) {
if (state == ZOO_CONNECTED_STATE)
cout<<"zookeeper connected"<<endl;
}
}
void callback(int rc, const struct String_vector *strings, const void *data) {
if (rc != ZOK)
cerr<<"callback: "<<zerror(rc)<<endl;
cerr<<"callback called."<<endl;
zoo_aget_children(_handle, path, 1, callback, data);
}
int main(int argc, char **argv) {
zoo_set_debug_level(ZOO_LOG_LEVEL_ERROR);
_handle = zookeeper_init("127.0.0.1:2181", init_callback, 30000, 0, 0, 0);
if (_handle == NULL)
zerror(errno);
sleep(1); // let zookeeper connect first
int rc = zoo_aget_children(_handle, path, 1, callback, (void *)path);
if (rc != ZOK)
cerr<<"main: "<<zerror(rc)<<endl;
while (1)
sleep(86400);
return 0;
}
即使callback
的孩子没有改变,Zookeeper也会继续致电node
。 Zookeeper版本3.4.9
。我试图将watch flag
设置为1,但这不起作用。我也试图不在callbak中调用zoo_aget_children
,但这也不起作用。
继续打印
回调电话。
叫回电。
叫回电。
回调叫做。
为什么?我是否以错误的方式使用zookeeper c api?