服务端处理 Watcher 实现 ?

Posted programb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务端处理 Watcher 实现 ?相关的知识,希望对你有一定的参考价值。

1、服务端接收 Watcher 并存储

接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点

的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接,实现

Watcher 的 process 接口,此时可以看成一个 Watcher 对象)存储在

WatcherManager 的 WatchTable 和 watch2Paths 中去。

2、Watcher 触发

以服务端接收到 setData() 事务请求触发 NodeDataChanged 事件为例:

2.1 封装 WatchedEvent

将通知状态(SyncConnected)、事件类型(NodeDataChanged)以及节点路

径封装成一个 WatchedEvent 对象

2.2 查询 Watcher

WatchTable 中根据节点路径查找 Watcher

2.3 没找到;说明没有客户端在该数据节点上注册过 Watcher

2.4 找到;提取并从 WatchTable 和 Watch2Paths 中删除对应 Watcher(从这里

可以看出 Watcher 在服务端是一次性的,触发一次就失效了

3、调用 process 方法来触发 Watcher

这里 process 主要就是通过 ServerCnxn 对应的 TCP 连接发送 Watcher 事件通知。

以上是关于服务端处理 Watcher 实现 ?的主要内容,如果未能解决你的问题,请参考以下文章

ZooKeeper Watcher 机制

zookeeper-客户端注册 Watcher 实现

zookeeper-客户端注册 Watcher 实现

zookeeper-客户端注册 Watcher 实现

Zookeeper Watcher(事件监听器)?

zookeeper学习-5Java API操作 - Watcher监听机制