2010-12-01 13 views
1

Je souhaite que mon application puisse afficher une liste de répertoires à partir d'un emplacement FTP (ou SFTP, etc.) distant. Lorsqu'un fichier/répertoire change dans l'arborescence de répertoire distant, l'application doit mettre à jour sa vue avec les modifications pertinentes. Parce que traverser l'arbre entier est lent et inutile, je voudrais utiliser quelque chose comme FSEvents (inotify/kqueues sous Linux), mais évidemment ces bibliothèques sont basées sur un système de fichiers, et une connexion à un serveur FTP n'est pas la même chose qu'un système de fichiers monté. Pour faire fonctionner ces librairies, je devrais monter un système de fichiers sauvegardé par FTP/SFTP sur la machine locale, puis attacher un FSEventStream (ou kqueue etc) à ce montage local. Je sais que FUSE peut le faire, mais est-ce que je peux utiliser FUSE sans que l'utilisateur doive d'abord l'installer? Je veux dire, est-ce que je peux le combiner avec mon application (Mac) et créer des montages sans avoir à faire exécuter à l'utilisateur un paquet d'installation pour copier libfuse et les modules du noyau dans le système? Est-ce qu'il suppose que /dev/fuse existe, ou peut-il vivre en dehors du chemin /dev/, dans le répertoire de mon application?Utilisez libfuse dans un projet, sans accès root (pour l'installation)? Montages FTP & inotify/kqueue/FSEvents

Les applications Nice Mac sont installées avec un simple glisser & et j'aimerais garder la mienne de cette façon si possible. Je ne sais pas s'il est possible d'utiliser libfuse directement (à condition que les fichiers soient inclus dans l'application), sans l'installer dans les chemins du système.

Vous avez également d'autres suggestions pour surveiller les modifications via FTP, sans interrogation?

Répondre

2

Malheureusement, FTP et SFTP ne supportent aucune forme de notification client. Tout comme HTTP, ils sont basés sur un schéma de demande/réponse, où chaque transfert de données est initié par le client. Ce qui ne fait qu'empirer les choses, c'est que, contrairement à HTTP, il n'y a aucun moyen de demander au serveur d'informer le client de tout changement depuis une date spécifique. Cela signifie que non seulement vous devez utiliser l'interrogation, mais aussi que cette interrogation ne sera en aucun cas légère. Dans la mesure où FUSE est associé, la plupart des modules FTP et SFTP disponibles ne mettent à jour leur vue du système de fichiers que lorsque les applications de l'espace utilisateur demandent une liste de répertoires (par exemple, Refresh dans une fenêtre de navigateur de fichiers). Ils n'effectuent pas d'interrogation par eux-mêmes. Votre application d'espace utilisateur devra lancer l'actualisation en interrogeant le répertoire lui-même.

EDIT:

Pour clarifier deux ou trois choses, les versions récentes de FUSE ne supportent les événements de notification. Ils passent simplement par les événements des modules au noyau. Les modules doivent encore les générer et dans le cas d'un module client FTP/SFTP impossible sans interroger le serveur. De plus, gardez à l'esprit que de nombreuses implémentations NFS actuelles ne prennent pas en charge les notifications de modification, bien que NFSv4.1 dispose des dispositions nécessaires. Beaucoup de serveurs SMB/CIFS (en particulier ceux dans les systèmes embarqués à faible coût liés au stockage en réseau) ont également un support limité ou inexistant.

+0

Merci, vous avez raison et je pense que je vais devoir revenir à un contrôle manuel "Actualiser" dans mon application. Je suis tombé sur cette interview avec l'auteur de MacFUSE mais qui indique que MacFUSE supporte FSEvents, kqueues et KAuth. Je ne suis pas sûr que cela fonctionnerait seulement si tous les événements se produisent sur le client cependant ...J'ai du mal à voir comment les événements se produisant sur l'hôte seraient reflétés sur le client. La recherche le dira (j'utiliserai de toute façon FSEvents pour la surveillance du stockage local, donc le pointage sur un montage sshfs sera trivial à tester). – d11wtq

+0

Err ... "cette interview" :) http://www.mactech.com/articles/mactech/Vol.23/23.03/MacFUSE-SinghInterview/index.html – d11wtq

+0

quels serveurs NFS supportent les notifications? et quels clients peuvent être utilisés avec ceux-ci? –

Questions connexes