客户端ClientWatchManager,管理由ClientXncn产生的watchers和handle events
在zookeeper的exists、getChildren、getData等这些API中可以注册watcher对象到ClientWatchManager中,
create、setData、delete等这些引起zookeeper节点变化的API会触发watcher process的执行。
服务端WatchManager,服务端的watcher对象管理器;
注册watcher时候,会在服务端调用FinalRequestProcessor.processRequest,注册client对应的服务端连接对象ServerCnxn(实现了watcher接口)到DataTree中
这样在触发server端的watcher时,其实就是触发ServerCnxn的process方法,在ServerCnxn的process这个实现里会向对应的注册watcher对象的client发送notify消息,
而客户端会调用对应path注册的watcher对象的process方法
服务端注册watcher对象
FinalRequestProcessor.processRequest
case OpCode.getData: {
...............................
Stat stat = new Stat();
byte b[] = zks.getZKDatabase().getData(getDataRequest.getPath(), stat,
getDataRequest.getWatch() ? cnxn : null);//cnxn为Serve