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

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

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

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

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

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 разбить файл на куски, для уменьшения трафика. Кстати, это два человека имеют один и тот же файл, даже если они не знают друг друга, сервер может оптимизировать и избежать передачи файла еще раз, только скопировав ее на стороне сервера


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


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

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

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