服务端处理 Watcher 的实现过程

参考答案

1.  服务端接收 Watcher 并存储

  • 接收到客户端请求,处理请求判断是否需要注册 Watcher,如需要,就将数据节点的节点路径和 ServerCnxn存储在WatcherManager 的 WatchTable 和 watch2Paths 中(ServerCnxn 代表一个客户端和服务端的连接,实现了 Watcher 的process 接口,此时可以看成一个 Watcher 对象)。

2. Watcher 触发

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

  • 封装 WatchedEvent将通知状态(SyncConnected)、事件类型(NodeDataChanged)以及节点路径封装成一个 WatchedEvent 对象
  • 查询 Watcher从 WatchTable 中根据节点路径查找 Watcher
  • 没找到;说明没有客户端在该数据节点上注册过 Watcher
  • 找到;提取并从 WatchTable 和 Watch2Paths 中删除对应 Watcher(从这里可以看出 Watcher 在服务端是一次性的,触发一次就失效了)

3.   调用 process 方法来触发 Watcher

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

 

以上,是Zookeeper面试题【服务端处理 Watcher 的实现过程】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧