Как работает клиент DropBox Mac?


Я смотрел на DropBox Mac-клиент, и в настоящее время я исследую реализацию аналогичного интерфейса для другого сервиса.

Как именно они взаимодействуют с finder? Я сильно сомневаюсь, что эти объекты, представленные в папке, являются реальными документами, загружаемыми при каждой загрузке? Они должны динамически загружаться по мере необходимости. Так как же можно отобразить эти элементы в finder, не имея реальных объектов файловой системы?

Кто-нибудь знает, как это делается? это достигается в Mac OS X?

Или любой указатель на Apple API или другие проекты с открытым исходным кодом, которые имеют аналогичную интеграцию с finder?

6 10

6 ответов:

Два предложения:

Первый позволит вам написать приложение, которое выглядит как файловая система и делает все правильно; второй позволит вам переместить все на серверную сторону и позволить пользователю просто монтировать ваш сервис в качестве общего файлового ресурса.

Dropbox не работает ни на MacFUSE, ни на WebDAV, хотя они могут быть прекрасными решениями для того, что вы пытаетесь сделать.

Если бы он питался от этих вещей, он не работал бы, когда вы не были подключены, так как оба они полагаются на сервер для хранения фактической информации, а Dropbox-нет. Если я выйду из Dropbox (сделано через пункт меню) и отключусь от сети, я все еще могу использовать файлы. Это потому, что файлы на самом деле хранятся здесь, на моем жестком диске. водить.

Это также означает, что файлы не нужно "скачивать при каждой загрузке", так как они фактически хранятся на моей машине здесь. Вместо этого только дельты передаются по проводу, и приложение Dropbox (работающее в фоновом режиме) исправляет файлы соответствующим образом. В противном случае приложение Dropbox отслеживает файлы в папке Dropbox, и когда они изменяются, оно отправляет соответствующие дельты на сервер, который распространяет их на любой другой клиенты.

У этой установки есть определенные преимущества: она работает в автономном режиме, на порядок быстрее, и она прозрачна для других приложений, так как они просто видят файлы на диске. Однако я понятия не имею, как он справляется с конфликтами слияния (которые могут легко возникнуть с одним или несколькими клиентами в автономном режиме), которые не являются проблемой, если сервер является единственной копией и каждое редактирование изменяет эту центральную копию.

Где Dropbox действительно сияет, так это то, что у них есть дополнительный трюк, который значки элементы в папке Dropbox с их текущим состоянием синхронизации. Но ты спрашиваешь не об этом.

Что касается рассматриваемого вопроса, то вам определенно следует обратиться к MacFUSE и WebDAV, которые могут быть идеальными решениями вашей проблемы. Но способ Dropbox делать вещи, с фоновым приложением, изменяющим фактические файлы на диске, может быть лучшим компромиссом.

Dropbox, скорее всего, используетFSEvents для отслеживания изменений в файловой системе. Это отличный API и может даже связывать изменения, которые произошли, пока ваше приложение не было запущено. Это тот же API, который использует Spotlight. Приложение menubar, скорее всего, делает само фактическое наблюдение (так как перезапуск его может исправить зависание загрузок, например).

Они никак не могут использовать MacFUSE, так как для этого потребуется установить расширение ядра MacFUSE, чтобы Dropbox работал, и поскольку я определенно не устанавливал его, я очень сомневаюсь, что они им пользуются.

Dropbox на клиенте написан на python. Клиент, похоже, использует базу данных sqlite3 для индексирования файлов. Я полагаю, что Dropobox разбивает файл на куски, чтобы уменьшить использование bandwith. Кстати, это два человека имеют один и тот же файл, даже если они не знают друг друга, сервер может оптимизировать и избежать передачи файла больше раз, только копируя его на стороне сервера

Для меня это похоже на сильно модифицированную систему контроля версий. Он имеет все функции: обновление файлов на основе дельт, опции для восстановления или восстановления старых версий файлов. Это почти похоже на то, что они используют git (GitFS?), или какую-то файловую систему, которую они разработали.

Вы также можете попробовать файловый конвейер. Это демон Python, способный мгновенно обнаруживать изменения FS (в Linux через inotify, в OS X через FSEvents), обрабатывать файлы и синхронизировать их с одним или несколькими назначениями.

Поддерживаемые протоколы: FTP, SFTP, Amazon S3 (CloudFront также поддерживается), облачные файлы Rackspace. Может быть легко расширен. Использует django-storages.

"обработка файлов" : например, оптимизация изображений, перекодирование видео-это было изначально задумано используется для отправки статических ресурсов в CDN в контексте ускорения веб-сайтов)