服务端处理 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 事件通知

posted @ 2020-09-10 09:38  咔啡  阅读(132)  评论(0编辑  收藏  举报