я использую 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
даже если дети node
не изменились Версия Zookeeper 3.4.9
Я пытался установить watch flag
до 1, но это не работает. И я тоже старался не звонить zoo_aget_children
в callbak, но это тоже не работает.
Продолжайте печатать
Обратный звонок называется.
Обратный звонок называется.
Обратный звонок называется.
Обратный звонок называется.
ЗАЧЕМ? Я использую Zookeeper C API неправильный путь?
Задача ещё не решена.
Других решений пока нет …