我一直在研究 DropBox Mac 客户端,目前正在研究为不同的服务实现类似的接口。
它们究竟是如何与 finder 这样的?我非常怀疑文件夹中表示的这些对象是每次加载时下载的实际文档?它们必须根据需要动态下载。那么如何在没有实际文件系统对象的情况下在 finder 中显示这些项目呢?
有谁知道这是如何在 Mac OS X 中实现的?
或者任何指向 Apple API 或其他与 finder 具有类似集成的开源项目的指针?
我一直在研究 DropBox Mac 客户端,目前正在研究为不同的服务实现类似的接口。
它们究竟是如何与 finder 这样的?我非常怀疑文件夹中表示的这些对象是每次加载时下载的实际文档?它们必须根据需要动态下载。那么如何在没有实际文件系统对象的情况下在 finder 中显示这些项目呢?
有谁知道这是如何在 Mac OS X 中实现的?
或者任何指向 Apple API 或其他与 finder 具有类似集成的开源项目的指针?
Dropbox 不是由 MacFUSE 或 WebDAV 提供支持,尽管这些可能是您想要完成的完美解决方案。
如果它是由这些东西驱动的,那么当你没有连接时它就不会工作,因为它们都依赖于服务器来存储实际信息,而 Dropbox 没有。如果我退出 Dropbox(通过菜单项完成)并断开网络连接,我仍然可以使用这些文件。那是因为这些文件实际上存储在我的硬盘上。
这也意味着文件不需要“每次加载时都下载”,因为它们实际上存储在我的机器上。相反,只有增量通过网络发送,Dropbox 应用程序(在后台运行)适当地修补文件。另一方面,Dropbox 应用程序监视 Dropbox 文件夹中的文件,当它们发生变化时,它将适当的增量发送到服务器,服务器将它们传播到任何其他客户端。
这种设置有一些明显的优势:它可以在离线时工作,速度要快一个数量级,并且对其他应用程序是透明的,因为它们只看到磁盘上的文件。但是,我不知道它如何处理合并冲突(一个或多个客户端离线时很容易出现),如果服务器是唯一的副本并且每次编辑都会更改中央副本,这不是问题。
Dropbox 真正闪耀的地方在于他们有一个额外的技巧,可以用当前同步状态标记 Dropbox 文件夹中的项目。但这不是你在这里问的。
至于手头的问题,您绝对应该研究 MacFUSE 和 WebDAV,它们可能是您问题的完美解决方案。但是 Dropbox 的做事方式,后台应用程序更改磁盘上的实际文件,可能是一个更好的权衡。
Dropbox 很可能使用FSEvents来监视文件系统的变化。这是一个很棒的 API,甚至可以捆绑在您的应用程序未运行时发生的更改。它与 Spotlight 使用的 API 相同。菜单栏应用程序可能会自己进行实际观察(例如,由于重新启动它可以修复上传被挂起的问题)。
他们不可能使用 MacFUSE,因为这需要安装 MacFUSE 内核扩展才能使 Dropbox 工作,而且由于我绝对没有安装它,我非常怀疑他们是否正在使用它。
客户端上的 Dropbox 是用 python 编写的。客户端似乎使用 sqlite3 数据库来索引文件。我想 Dropobox 将文件分成块,以减少带宽使用。顺便说一句,两个人有同一个文件,即使不认识,服务器也可以优化,避免多次传输文件,只在服务器端复制
对我来说,这感觉就像一个经过大量修改的修订控制系统。它具有所有功能:基于增量更新文件、恢复或恢复文件旧版本的选项。几乎感觉他们正在使用 git(GitFS?),或者他们设计的一些文件系统。
你也可以试试File Conveyor 。它是一个 Python 守护程序,能够立即检测 FS 更改(在 Linux 上inotify
,在 OS X 上FSEvents
),处理文件并将它们同步到一个或多个目的地。
支持的协议:FTP、SFTP、Amazon S3(也支持 CloudFront)、Rackspace Cloud Files。可以很容易地扩展。用途django-storages
.
“处理文件”:例如优化图像、转码视频——这最初被设想用于在加速网站的情况下将静态资产发送到 CDN)