2008-10-09 12 views
10

He estado buscando al cliente Mac DropBox y actualmente estoy investigando la implementación de una interfaz similar para un servicio diferente.¿Cómo funciona el cliente DropBox Mac?

¿Cómo interactúan con el buscador de esta manera? Dudo mucho que estos objetos representados en la carpeta sean documentos reales descargados en cada carga. Deben descargar dinámicamente a medida que se necesiten. Entonces, ¿cómo puede mostrar estos elementos en el buscador sin tener objetos del sistema de archivos reales?

¿Alguien sabe cómo se logra esto en Mac OS X?

O cualquier puntero a Apple API u otros proyectos de código abierto que tienen una integración similar con el buscador?

Respuesta

6

Dos sugerencias:

El primero le permitirá escribir una aplicación que aparece como un sistema de archivos y hace todo lo correcto; este último le permitirá mover todo en el lado del servidor y dejar que el usuario simplemente monte su servicio como un recurso compartido de archivos.

+0

MacFUSE es exactamente lo que necesito. Me había olvidado por completo. Gracias hombre. –

31

Dropbox no funciona con MacFUSE o WebDAV, aunque esas pueden ser soluciones perfectas para lo que está tratando de lograr.

Si funcionara con esas características, no funcionaría cuando no estuvieras conectado, ya que ambos dependen del servidor para almacenar la información real y Dropbox no. Si salgo de Dropbox (hecho a través del elemento del menú) y me desconecto de la red, aún puedo usar los archivos. Eso es porque los archivos están almacenados aquí en mi disco duro.

También significa que no es necesario "descargar los archivos en cada carga", ya que en realidad están almacenados en mi máquina aquí. En cambio, solo los deltas se envían por cable y la aplicación de Dropbox (que se ejecuta en segundo plano) actualiza los archivos de manera adecuada. Yendo para otro lado, la aplicación Dropbox busca los archivos en la carpeta de Dropbox, y cuando cambian, envía los deltas apropiados al servidor, que los propaga a otros clientes.

Esta configuración tiene algunas ventajas decisivas: funciona cuando no está conectado, es un orden de magnitud más rápido y es transparente para otras aplicaciones, ya que solo ven archivos en el disco. Sin embargo, no tengo idea de cómo se trata con los conflictos de combinación (que podrían surgir fácilmente con uno o más clientes fuera de línea), que no son un problema si el servidor es la única copia y cada edición cambia esa copia central.

Donde Dropbox realmente brilla es que tienen un truco adicional que identifica los elementos en la carpeta de Dropbox con su estado de sincronización actual. Pero eso no es lo que preguntas aquí.

En cuanto a la cuestión que nos ocupa, definitivamente debe considerar MacFUSE y WebDAV, que pueden ser soluciones perfectas para su problema. Pero la forma de hacer las cosas de Dropbox, con una aplicación en segundo plano que cambie los archivos reales en el disco, podría ser una mejor solución.

+2

En cuanto a los conflictos, Dropbox aparentemente (nunca) [intentará fusionar cambios] (https://www.dropbox.com/help/36). En cambio, creará dos archivos. – mjs

11

Es probable que Dropbox use FSEvents para ver los cambios en el sistema de archivos. Es una gran API e incluso puede agrupar los cambios que ocurrieron mientras tu aplicación no se estaba ejecutando. Es la misma API que usa Spotlight. La aplicación de la barra de menú probablemente hace la observación en sí misma (ya que reiniciarla puede corregir las cargas que se cuelgan, por ejemplo).

No hay forma de que utilicen MacFUSE, ya que eso requeriría la instalación de la extensión del kernel de MacFUSE para que Dropbox funcione, y como definitivamente no la instalé, dudo mucho que la estén usando.

2

Para mí, se siente como un sistema de control de revisiones muy modificado. Tiene todas las características: actualiza archivos basados ​​en deltas, opciones para recuperar o restaurar viejas revisiones de archivos. Casi parece que están usando git (GitFS?), O algún sistema de archivos que diseñaron.

3

Dropbox en el cliente está escrito en python. El cliente parece usar una base de datos sqlite3 para indexar archivos. Supongo que Dropobox dividió un archivo en fragmentos para reducir el uso de ancho de banda. Por cierto, dos personas tienen el mismo archivo, incluso si no se conocen, el servidor puede optimizar y evitar transferir el archivo más veces, solo copiándolo en el lado del servidor

+0

Me pareció que si dos personas tienen el mismo archivo, entonces no se carga la segunda vez. Sin embargo, esto debe significar que los archivos no están encriptados en el cliente, pero la documentación de Dropbox sugiere que sí. ¿Cuál es su razón para pensar que solo se guarda una copia del mismo archivo en los servidores de Dropbox? – mjs

+2

Drew Houston ha reconocido que lo hacen. Se llama deduplicación. (Además, los archivos NO están encriptados en el cliente. Se dice que están encriptados en los servidores S3, pero solo después de que Dropbox recibe los archivos no encriptados. Además, los archivos están encriptados con una clave específica de Dropbox lo que significa que todavía pueden acceder al datos) – chacham15

2

También podría dar File Conveyor una oportunidad. Es un demonio Python capaz de detectar instantáneamente cambios FS (en Linux a través de inotify, en OS X a través de FSEvents), procesando los archivos y sincronizándolos con uno o más destinos.

Protocolos admitidos: FTP, SFTP, Amazon S3 (CloudFront también es compatible), Rackspace Cloud Files. Se puede extender fácilmente. Utiliza django-storages.

"archivos de procesamiento": p. optimización de imágenes, transcodificación de videos: esto se concibió originalmente para ser utilizado para enviar activos estáticos a un CDN en el contexto de la aceleración de sitios web)