2008-10-09 4 views
10

Ich habe mir den DropBox Mac-Client angeschaut und forsche derzeit an der Implementierung einer ähnlichen Schnittstelle für einen anderen Dienst.Wie funktioniert der DropBox Mac Client?

Wie genau verbinden sie sich mit Finder so? Ich bezweifle stark, dass diese Objekte, die in dem Ordner dargestellt werden, tatsächliche Dokumente sind, die bei jedem Laden heruntergeladen werden? Sie müssen dynamisch heruntergeladen werden, wie sie benötigt werden. Wie können Sie diese Elemente im Finder anzeigen, ohne tatsächliche Dateisystemobjekte zu haben?

Weiß jemand, wie dies in Mac OS X erreicht wird?

Oder ein Zeiger auf Apple APIs oder andere Open-Source-Projekte, die eine ähnliche Integration mit Finder haben?

Antwort

6

Zwei Vorschläge:

Erstere ermöglicht es Ihnen, eine App zu schreiben, die als Dateisystem erscheint und tut die richtigen Dinge; Letzteres ermöglicht es Ihnen, alles serverseitig zu verschieben und den Benutzer Ihren Dienst als Dateifreigabe bereitstellen zu lassen.

+0

MacFUSE ist genau das, was ich brauche. Ich hatte es total vergessen. Danke Mann. –

31

Dropbox wird weder von MacFUSE noch von WebDAV unterstützt, obwohl dies für das, was Sie erreichen möchten, eine perfekte Lösung darstellt.

Wenn es von diesen Dingen angetrieben würde, würde es nicht funktionieren, wenn Sie nicht verbunden waren, da beide auf den Server angewiesen sind, um die tatsächlichen Informationen zu speichern, und Dropbox nicht. Wenn ich Dropbox (über den Menüeintrag) verlasse und die Verbindung zum Internet abbringe, kann ich die Dateien trotzdem verwenden. Das liegt daran, dass die Dateien tatsächlich hier auf meiner Festplatte gespeichert sind.

Es bedeutet auch, dass die Dateien nicht "bei jeder Ladung heruntergeladen werden müssen", da sie tatsächlich auf meinem Rechner gespeichert sind. Stattdessen werden nur die Deltas über die Leitung gesendet, und die Dropbox-Anwendung (die im Hintergrund ausgeführt wird) patcht die Dateien entsprechend. Umgekehrt sucht die Dropbox-Anwendung nach den Dateien im Dropbox-Ordner. Wenn sie sich ändern, sendet sie die entsprechenden Deltas an den Server, der sie an andere Clients weiterleitet.

Dieses Setup hat einige entscheidende Vorteile: Es funktioniert, wenn es offline ist, es ist eine Größenordnung schneller, und es ist für andere Anwendungen transparent, da sie nur Dateien auf der Festplatte sehen. Ich habe jedoch keine Ahnung, wie es mit Zusammenführungskonflikten umgeht (die leicht mit einem oder mehreren Clients offline entstehen könnten), die kein Problem darstellen, wenn der Server die einzige Kopie ist und jede Änderung diese zentrale Kopie ändert.

Wo Dropbox wirklich glänzt, ist, dass sie einen zusätzlichen Trick haben, der die Artikel im Dropbox-Ordner mit ihrem aktuellen Synchronisierungsstatus kennzeichnet. Aber darum geht es hier nicht.

Soweit die Frage zur Hand, sollten Sie auf jeden Fall in MacFUSE und WebDAV schauen, die perfekte Lösungen für Ihr Problem sein könnten. Aber die Dropbox-Methode, bei der eine Hintergrundanwendung die tatsächlichen Dateien auf der Festplatte ändert, könnte ein besserer Kompromiss sein.

+2

In Bezug auf Konflikte wird Dropbox anscheinend (nie) [versuchen, Änderungen zusammenzuführen] (https://www.dropbox.com/help/36). Stattdessen erstellt es zwei Dateien. – mjs

11

Dropbox verwendet wahrscheinlich FSEvents, um nach Änderungen am Dateisystem zu suchen. Es ist eine großartige API und kann sogar Änderungen zusammenführen, die während der Ausführung Ihrer App aufgetreten sind. Es ist die gleiche API, die Spotlight verwendet. Die Menüleiste App macht wahrscheinlich die eigentliche Beobachtung (seit dem Neustart kann z. B. Uploads aufgehängt werden).

Es gibt keine Möglichkeit, MacFUSE zu verwenden, da dies die Installation der MacFUSE-Kernel-Erweiterung erfordern würde, damit Dropbox funktioniert, und da ich es definitiv nicht installiert habe, bezweifle ich, dass es es benutzt.

2

Für mich fühlt sich das wie ein stark modifiziertes Revisionskontrollsystem an. Es verfügt über alle Funktionen: Dateien auf Deltas basierend, Optionen zum Wiederherstellen oder Wiederherstellen alter Versionen von Dateien. Es fühlt sich fast so an, als würden sie git (GitFS?) Oder ein von ihnen entwickeltes Dateisystem benutzen.

3

Dropbox auf dem Client ist in Python geschrieben. Der Client scheint eine SQLite3-Datenbank zum Indexieren von Dateien zu verwenden. Ich nehme an, Dropobox teilt eine Datei in Stücke, um die Bandbreite zu reduzieren. Übrigens, es zwei Personen hat die gleiche Datei, auch wenn sie einander nicht kennen, kann der Server optimieren und vermeiden, die Datei mehrmals zu übertragen, nur auf der Serverseite

+0

Es erschien mir, wenn zwei Leute die selbe Datei haben, wird sie beim zweiten Mal nicht hochgeladen. Dies bedeutet jedoch, dass Dateien auf dem Client nicht verschlüsselt sind, aber die Dropbox-Dokumentation schlägt dies vor. Was ist der Grund dafür, dass immer nur eine Kopie der gleichen Datei auf den Servern von Dropbox gespeichert wird? – mjs

+2

Drew Houston hat bestätigt, dass sie dies tun. Es heißt Deduplizierung. (Die Dateien sind NICHT auf dem Client verschlüsselt. Es wird gesagt, dass sie auf den S3-Servern verschlüsselt sind, aber nur nachdem Dropbox die unverschlüsselten Dateien empfängt. Außerdem sind die Dateien mit einem Dropbox-spezifischen Schlüssel verschlüsselt, was bedeutet, dass sie weiterhin auf den Daten) – chacham15

2

Sie können auch geben File Conveyor ein Versuch. Es ist ein Python-Daemon, der FS-Änderungen sofort erkennen kann (unter Linux unter inotify, unter OS X über FSEvents) und die Dateien und synchronisiert, um sie mit einem oder mehreren Zielen zu synchronisieren.

Unterstützte Protokolle: FTP, SFTP, Amazon S3 (CloudFront wird ebenfalls unterstützt), Rackspace Cloud-Dateien. Kann leicht erweitert werden. Verwendet django-storages.

"Verarbeitungsdateien": z.B. Bilder optimieren, Videos transkodieren - dies wurde ursprünglich für das Senden von statischen Assets an ein CDN im Zusammenhang mit der Beschleunigung von Websites konzipiert.

Verwandte Themen