Jak działa klient DropBox Mac?

Przyglądałem się klientowi DropBox Mac i obecnie zastanawiam się nad implementacją podobnego interfejsu dla innej usługi.

Jak dokładnie łączą się z Finderem w taki sposób? Szczerze wątpię, że te obiekty reprezentowane w folderze są prawdziwymi dokumentami pobieranymi przy każdym ładowaniu? Muszą dynamicznie pobierać w miarę potrzeb. Jak więc wyświetlać te elementy w Finderze bez posiadania rzeczywistych obiektów systemu plików?

Czy ktoś wie jak to jest osiągane w Mac OS X?

Lub jakiś wskaźnik do API Apple lub innych projektów open source, które mają podobną integrację z Finderem?

Author: Quinn Taylor, 2008-10-09

6 answers

Dwie propozycje:

Pierwszy pozwoli Ci napisać aplikację, która pojawia się jako system plików i robi wszystkie właściwe rzeczy; drugi pozwoli Ci przenieść wszystko po stronie serwera i pozwolić użytkownikowi po prostu zamontować usługę jako udział plików.

 6
Author: Jim Puls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 01:06:27

Dropbox nie jest zasilany ani przez MacFUSE, ani WebDAV, chociaż mogą to być doskonałe rozwiązania dla tego, co próbujesz osiągnąć.

Gdyby był zasilany przez te rzeczy, nie działałby, gdy nie byłbyś połączony, ponieważ obie te funkcje polegają na serwerze do przechowywania rzeczywistych informacji, a Dropbox tego nie robi. Jeśli zakończę Dropbox (zrobione za pomocą elementu menu) i odłączę się od sieci, nadal mogę korzystać z plików. To dlatego, że pliki są przechowywane tutaj na moim dysku jedź.

Oznacza to również, że pliki nie muszą być "pobierane przy każdym obciążeniu", ponieważ są one rzeczywiście przechowywane na moim komputerze tutaj. Zamiast tego przesyłane są tylko delty, a aplikacja Dropbox (działająca w tle) odpowiednio łata pliki. Idąc w drugą stronę, aplikacja Dropbox obserwuje pliki w folderze Dropbox, a gdy się zmieni, wysyła odpowiednie delty na serwer, który propaguje je na inne klientów.

Ta konfiguracja ma pewne zalety: działa w trybie offline, jest o rząd wielkości szybsza i jest przezroczysta dla innych aplikacji, ponieważ widzą tylko pliki na dysku. Nie mam jednak pojęcia, jak radzi sobie z konfliktami scalania (które mogą łatwo powstać z jednym lub więcej klientami offline), które nie są problemem, jeśli serwer jest jedyną kopią i każda edycja zmienia tę centralną kopię.

Gdzie Dropbox naprawdę błyszczy, to że mają dodatkową sztuczkę, która elementy w folderze Dropbox z ich bieżącym statusem synchronizacji. Ale nie o to pytasz.

Jeśli chodzi o pytanie, zdecydowanie powinieneś przyjrzeć się MacFUSE i WebDAV, które mogą być doskonałymi rozwiązaniami Twojego problemu. Ale sposób działania Dropbox, z aplikacją w tle zmieniającą rzeczywiste pliki na dysku, może być lepszym rozwiązaniem.

 31
Author: TALlama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 15:59:11

Dropbox prawdopodobnie używa FSEvents do śledzenia zmian w systemie plików. Jest to świetny API i może nawet wiązać zmiany, które miały miejsce, gdy aplikacja nie była uruchomiona. To ten sam API, którego używa Spotlight. Aplikacja paska menu prawdopodobnie sama dokonuje obserwacji (ponieważ ponowne uruchomienie może naprawić na przykład zawieszanie się przesyłania).

Nie ma mowy, aby używali MacFUSE, ponieważ wymagałoby to zainstalowania rozszerzenia jądra MacFUSE, aby Dropbox działał, a ponieważ zdecydowanie go nie zainstalowali, wątpię, że go używają.

 11
Author: Colin Barrett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-27 04:43:31

Dropbox na kliencie jest napisany w Pythonie. Klient zdaje się używać bazy danych sqlite3 do indeksowania plików. Przypuszczam, że Dropobox dzieli plik na kawałki, aby zmniejszyć zużycie pasma. Nawiasem mówiąc, to dwie osoby mają ten sam plik, nawet jeśli się nie znają, serwer może zoptymalizować i uniknąć przesyłania pliku więcej razy, tylko kopiując go po stronie serwera

 3
Author: daitangio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-16 12:26:01

Dla mnie to wygląda jak mocno zmodyfikowany system kontroli wersji. Posiada wszystkie funkcje: aktualizuje pliki oparte na deltach, opcje odzyskiwania lub przywracania starych wersji plików. Wydaje mi się, że używają Gita (GitFS ?), lub jakiś system plików, który zaprojektowali.

 2
Author: rem7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 07:56:49

Możesz też spróbowaćFile Conveyor . Jest to demon Pythona zdolny do natychmiastowego wykrywania zmian FS( w Linuksie przez inotify, W OS X przez FSEvents), przetwarzania plików i synchronizacji ich do jednego lub więcej miejsc docelowych.

Obsługiwane protokoły: FTP, SFTP, Amazon S3( obsługiwany jest również CloudFront), pliki w chmurze Rackspace. Można go łatwo rozszerzyć. Używa django-storages.

"przetwarzanie plików": np. optymalizacja obrazów, transkodowanie filmów-to było pierwotnie pomyślane do wysyłania zasobów statycznych do CDN w kontekście przyspieszania stron internetowych)

 2
Author: Wim Leers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 09:05:27