Как работает клиент DropBox Mac? - PullRequest
10 голосов
/ 09 октября 2008

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

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

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

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

Ответы [ 6 ]

31 голосов
/ 09 октября 2008

Dropbox не работает ни на MacFUSE, ни на WebDAV, хотя это может быть идеальным решением для достижения ваших целей.

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

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

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

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

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

11 голосов
/ 27 октября 2008

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

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

6 голосов
/ 09 октября 2008

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

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

3 голосов
/ 23 июня 2010

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

2 голосов
/ 23 августа 2011

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

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

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

2 голосов
/ 26 февраля 2009

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

...