Macos DropBox Mac客户端是如何工作的?

Macos DropBox Mac客户端是如何工作的?,macos,filesystems,integration,finder,fsevents,Macos,Filesystems,Integration,Finder,Fsevents,我一直在研究Mac客户端,目前正在研究为不同的服务实现类似的接口 它们是如何与finder进行这样的接口的?我非常怀疑文件夹中表示的这些对象是否是每次加载时下载的实际文档?它们必须根据需要动态下载。那么,在没有实际文件系统对象的情况下,如何在finder中显示这些项呢 有人知道这是如何在Mac OS X中实现的吗? 或者任何指向苹果API或其他与finder有类似集成的开源项目的指针 两个建议: 前者将允许您编写一个应用程序,该应用程序显示为文件系统,并执行所有正确的操作;后者将允许您将

我一直在研究Mac客户端,目前正在研究为不同的服务实现类似的接口

它们是如何与finder进行这样的接口的?我非常怀疑文件夹中表示的这些对象是否是每次加载时下载的实际文档?它们必须根据需要动态下载。那么,在没有实际文件系统对象的情况下,如何在finder中显示这些项呢

有人知道这是如何在Mac OS X中实现的吗?

或者任何指向苹果API或其他与finder有类似集成的开源项目的指针

两个建议:


前者将允许您编写一个应用程序,该应用程序显示为文件系统,并执行所有正确的操作;后者将允许您将所有内容移动到服务器端,让用户只需将您的服务装载为文件共享。

Dropbox不由MacFUSE或WebDAV提供电源,尽管这些可能是您尝试实现的完美解决方案

如果它是由这些东西驱动的,当你没有连接的时候它就不工作了,因为它们都依赖于服务器来存储实际的信息,而Dropbox则没有。如果我退出Dropbox(通过菜单项完成)并断开与网络的连接,我仍然可以使用这些文件。这是因为文件实际上存储在我的硬盘上

这也意味着文件不需要“每次加载都下载”,因为它们实际上存储在我的机器上。取而代之的是,只有增量通过网络发送,Dropbox应用程序(在后台运行)会适当地修补文件。另一方面,Dropbox应用程序监视Dropbox文件夹中的文件,当这些文件发生更改时,它会将相应的增量发送到服务器,服务器会将它们传播到任何其他客户端

这种设置有一些明显的优点:它在脱机时工作,速度快了一个数量级,而且对其他应用程序是透明的,因为它们只看到磁盘上的文件。但是,我不知道它如何处理合并冲突(一个或多个客户端脱机时很容易发生),如果服务器是唯一的副本,并且每次编辑都会更改该中心副本,那么合并冲突就不是问题

Dropbox真正引人注目的地方在于,他们还有一个额外的技巧,即用Dropbox文件夹中的项目的当前同步状态标记这些项目。但这不是你要问的

至于手头上的问题,您一定要研究MacFUSE和WebDAV,它们可能是解决您问题的完美方案。但是Dropbox的工作方式,即后台应用程序更改磁盘上的实际文件,可能是一个更好的折衷办法。

Dropbox可能会用来监视文件系统的更改。这是一个很棒的API,甚至可以捆绑在应用程序未运行时发生的更改。它与Spotlight使用的API相同。menubar应用程序可能会自己进行实际观察(例如,重新启动它可以修复挂起的上传)


他们不可能使用MacFUSE,因为这需要安装MacFUSE内核扩展才能使Dropbox正常工作,而且由于我肯定没有安装它,我高度怀疑他们是否在使用它。

对我来说,它感觉像是一个经过大量修改的版本控制系统。它具有所有功能:基于增量更新文件,恢复或恢复文件旧版本的选项。几乎感觉他们在使用git(?),或者他们设计的某个文件系统

客户端上的Dropbox是用python编写的。 客户端似乎使用sqlite3数据库来索引文件。 我想Dropobox会将一个文件分割成块,以减少使用量。 顺便说一句,如果两个人拥有相同的文件,即使他们彼此不认识,服务器也可以优化并避免多次传输该文件,只需在服务器端复制该文件

您也可以尝试一下。它是一个Python守护进程,能够立即检测FS更改(在Linux上通过
inotify
,在OS X上通过
FSEvents
),处理文件并将其同步到一个或多个目标

支持的协议:FTP、SFTP、AmazonS3(也支持CloudFront)、Rackspace云文件。可以很容易地扩展。使用
django存储


“处理文件”:例如,优化图像、转码视频-这最初被设想用于在加速网站的背景下将静态资产发送到CDN)

MacFUSE正是我所需要的。我完全忘记了这件事。谢谢,伙计。关于冲突,Dropbox显然不会(永远)。相反,它会创建两个文件。在我看来,如果两个人有相同的文件,那么它不会第二次上传。但是,这一定意味着文件在客户端上没有加密,但Dropbox文档表明它是加密的。你为什么认为Dropbox的服务器上只保存了同一个文件的一个副本?Drew Houston承认他们是这么做的。这称为重复数据消除。(此外,这些文件在客户端上未加密。据说它们在S3服务器上加密,但只有在Dropbox接收到未加密的文件后才加密。此外,这些文件使用Dropbox特定的密钥加密,这意味着它们仍然可以访问数据)