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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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