设想:
我正在使用 FSEvents 成功监视本地监视文件夹。
使用相同的 FSEVents 代码从远程服务器监视挂载卷中的目录,例如,AFS (/Volumes/example) 成功通知我的 FSEVents 回调本地客户端更改的任何文件,但不通知其他用户在其他机器 - 即使我确实看到这些更改立即反映在 Finder 中。
这是我的 FSEvents 实现:DirectoryWatcher.m
我期望发生的事情:
Finder 看到的任何更新、我的 FSEVent 工具或任何其他适当的 API 都会检测到这些更改并通知我的应用程序。当任何用户进行更改时,它们会出现在任何其他用户 Finder 中,并且我的应用程序会通知更改回调。
实际发生的情况:
客户端机器 Bob 从 Alice 的服务器安装卷“示例”
Bob 对“example”中的任何子目录进行更改,并且 bob 的文件监视应用程序(我的应用程序 :))会立即通知更改。耶!
现在 Fred 登录到 Alices 服务器并挂载“示例”卷,并进行更改。弗雷德收到通知 - 是的。鲍勃不是。嘘。此外,Fred 不会被通知 Bob 所做的更改。嘘。
此外,如果 Alice 直接在服务器上进行更改,Fred 和 Bob 都不会触发 FSEvents - 即使在所有情况下,Finder 都会立即知道更改并在任何更改时更新文件列表和图标。
问题:
有人对远程服务器上的文件系统事件通知有任何指示吗?FSEvents 对于这个问题来说几乎是完美的。轮询是唯一的选择吗?
我想 AFS/SMB 协议具有通知工具,用于通知客户端发生了更改-但这些更改不在文件系统级别,并且此 FSEVents 不知道。IE:Finder 知道是因为它被接入协议事件流,而不仅仅是文件系统事件流?
如果没有轮询,这甚至可能吗?
请注意,我正在测试 10.13 到 10.11。
谢谢!