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 实现
最新推荐文章于 2024-06-21 09:39:44 发布
本文深入探讨了Zookeeper的Watcher机制。当服务端接收到客户端的请求时,会判断是否需要注册Watcher,并将节点路径和连接存储。一旦发生指定事件,如setData()导致NodeDataChanged,服务端会创建WatchedEvent,查询并触发相应的Watcher,通过TCP连接发送事件通知。Watcher在服务端一次性触发,之后即失效。
摘要由CSDN通过智能技术生成