zoo_aget_children()守护者调用回调函数

时间:2016-11-02 06:42:51

标签: c++ linux apache-zookeeper

说明

我使用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?

0 个答案:

没有答案