函数名称:Zookeeper::setWatcher()
适用版本:PHP 5 >= 5.3.0, PHP 7
函数说明:Zookeeper::setWatcher() 方法用于设置一个回调函数,当指定的节点发生变化时会触发该回调函数。
用法:
bool Zookeeper::setWatcher(string $path, callable $watcher_cb): bool
参数:
$path
:需要监视的节点的路径。$watcher_cb
:一个回调函数,当指定节点发生变化时会被调用。该回调函数有三个参数:$event_type
表示事件类型,$stat
表示节点的状态信息,$path
表示发生变化的节点路径。
返回值:
- 成功时,返回true。
- 失败时,返回false。
示例:
$zookeeper = new Zookeeper('localhost:2181');
$path = '/my_node';
// 创建一个回调函数
function watcherCallback($event_type, $stat, $path) {
echo "Node $path has changed!";
echo "Event type: $event_type";
echo "Node stat: " . var_export($stat, true);
}
// 设置监视器
$zookeeper->setWatcher($path, 'watcherCallback');
// 模拟节点变化
$zookeeper->set($path, 'new_data');
// 在此处等待一段时间,以便触发回调函数
// 输出:
// Node /my_node has changed!
// Event type: 3
// Node stat: array (
// 'ctime' => 1632362115,
// 'mtime' => 1632362120,
// 'version' => 1,
// 'cversion' => 0,
// 'aversion' => 0,
// 'ephemeralOwner' => 0,
// 'dataLength' => 8,
// 'numChildren' => 0,
// 'pzxid' => 3,
// )
注意事项:
- 在设置监视器之前,需要先创建一个Zookeeper实例,并通过连接字符串连接到ZooKeeper服务器。
- 回调函数必须是一个可调用的函数,可以是普通函数、匿名函数或类方法。
- 回调函数的参数顺序必须与示例中的顺序一致,即
$event_type
、$stat
、$path
。 - 当指定节点发生变化时,回调函数会被异步调用,因此需要在合适的位置等待一段时间以触发回调函数的执行。