6

有些东西让我很感兴趣,我没有找到任何资源。

FileSystemWatcher 如何知道计算机“A”上的文件何时创建/删除/更改/重命名?

我认为这适用于轮询(观察者轮询服务器以检查更新),但在使用 Wireshark 验证网络活动后,我发现没有使用轮询。SMB 协议是否使用可观察/观察者模式?

在这种情况下,服务器如何知道客户端何时不再观察他?

当网络在观察期间下降并在之后立即恢复时会产生什么后果?

在另一台计算机上使用 FileSystemWatcher 似乎太容易了……

4

2 回答 2

8

在另一台计算机上使用 FileSystemWatcher 似乎太容易了……

有点像。底层 API -ReadDirectoryChanges()打开与服务器的连接,服务器负责在发生变化时做出响应。如果该连接由于某种原因被丢弃,或者您遇到了您正在连接的操作系统的连接限制,那么您将不会收到通知。

我发现定期轮询(间隔相当长)更可靠,并且FileSystemWatcher仅用作快速响应轮询之间变化的一种方式。

于 2009-03-09T17:06:49.353 回答
0

我认为 FileSystemWatcher 确实使用了基于底层 Win32 API 的观察者/可观察模式。不确定实际事件,但大概是当您初始化 FileSystemWatcher 对象以监视网络路径并设置 EnableRaisingEvents 属性时,它通过附加到 Win32 API 引发的事件,将自身作为观察者在幕后附加到文件夹,就像它们会该文件夹位于同一台计算机上。

在观察者设计模式中,主体(可观察者)永远不知道观察者的数量或类型,因此关于另一台计算机知道 FSW 何时不再观看的点是无关紧要的。

如果在引发事件的过程中网络中断,这有点棘手 - 其他人将不得不在那里帮助您。

于 2009-03-09T17:01:04.127 回答