我正在编写ZooKeeper客户端来监视节点。仅在我第一次更改节点数据时才调用回调函数。我不确定为什么该功能在第二次更改时不执行。
第二个查询是,如果我取消对最后一个close()
函数的注释,则程序将终止。作为一个好习惯,我应该使用close()
函数,但是它不会进入阻塞状态来监听传入的事件。我该如何实现?我已经阅读了文档,但是找不到有用的东西。
var zookeeper = require("node-zookeeper-client");
var client = zookeeper.createClient("192.168.43.172:2181");
var path = process.argv[2];
client.once("connected", function() {
console.log("Connected to the server.");
client.create(path, new Buffer("data"), function(error) {
if (error) {
console.log("Failed to create node: %s due to: %s.", path, error);
} else {
console.log("Node: %s is successfully created.", path);
}
});
client.getData(
path,
function(event) {
console.log("Got event: %s.", event);
},
function(error, data, stat) {
if (error) {
console.log(error.stack);
return;
}
console.log("Got data: %s", data.toString("utf8"));
}
);
//client.close();
});
client.connect();
答案 0 :(得分:0)
我仍然没有第二个查询的答案,但是对于第一个查询,zookeeper服务器被设计为仅在第一次发生更改时发送事件,然后删除该开关。为了继续接收事件,我不得不在处理触发事件时再次设置手表。下面是我的代码:
var zookeeper = require("node-zookeeper-client");
var client = zookeeper.createClient("192.168.43.172:2181");
var path = process.argv[2];
client.once("connected", function() {
console.log("Connected to the server.");
var watch = function(event) {
console.log("Got event: %s.", event);
client.getData(path, watch, getDat);
};
var getDat = function(error, data, stat) {
if (error) {
console.log(error.stack);
return;
}
console.log("Got data: %s", data.toString("utf8"));
};
client.getData(path, watch, getDat);
// client.close();
});
client.connect();