1

アプリケーションで、リモートFTP(またはSFTPなど)の場所からディレクトリリストを表示できるようにしたいと思います。リモートディレクトリツリーでファイル/ディレクトリが変更された場合、アプリケーションは関連する変更でビューを更新する必要があります。

ツリー全体をトラバースするのは遅くて無駄なので、FSEvents(Linuxではinotify / kqueues)に沿って何かを使用したいのですが、明らかにこれらのライブラリはファイルシステムベースであり、FTPサーバーへの接続は同じではありませんマウントされたファイルシステムとして。

これらのライブラリを機能させるには、FTP / SFTPでバックアップされたファイルシステムをローカルマシンに実際にマウントしてから、このローカルマウントにFSEventStream(またはkqueueなど)をアタッチする必要があります。FUSEでこれができることは知っていますが、ユーザーが最初にインストールしなくてもFUSEを使用できる方法はありますか?つまり、libfuseとカーネルモジュールをシステムにコピーするためにインストーラーパッケージを実際に実行するプロセスをユーザーに行わなくても、(Mac)アプリケーションにバンドルしてマウントを作成できますか?それは存在すると仮定しますか、それともこれは私のアプリケーションディレクトリ内/dev/fuseのパスの外に住むことができますか?/dev/

素敵なMacアプリケーションは簡単なドラッグアンドドロップでインストールされます。可能であれば、この方法を維持したいと思います。システムパスにインストールせずに、libfuseを直接使用できるかどうか(ファイルがアプリに含まれている場合)はわかりません。

または、ポーリングせずにFTP経由で変更を監視するためのその他の提案はありますか?

4

1 に答える 1

2

残念ながら、 FTPSFTPはクライアント通知の形式をサポートしていません。

HTTP と同様に、各データ転送がクライアントによって開始される要求/応答スキームに基づいています。さらに悪いことに、HTTP とは異なり、特定の日付以降の変更をクライアントに通知するようにサーバーに依頼する方法がありません。

これは、ポーリングを使用する必要があるだけでなく、ポーリングが決して軽量ではないことを意味します。

FUSE に関する限り、使用可能なほとんどの FTP および SFTP モジュールは、ユーザー空間アプリケーションがディレクトリ リストを要求した場合 (たとえば、ファイル ブラウザー ウィンドウで [更新] をクリックした場合) にのみ、ファイル システムのビューを更新します。独自にポーリングを実行することはありません。ユーザー空間アプリケーションは、ディレクトリ自体をポーリングして更新を開始する必要があります。

編集:

いくつかのことを明確にするために、FUSE の最近のバージョンは通知イベントをサポートしています。モジュールからカーネルにイベントを渡すだけです。モジュールは依然としてそれらを生成する必要があり、FTP/SFTP クライアント モジュールの場合、サーバーをポーリングせずには不可能です。

また、NFSv4.1 には必要な規定があるにもかかわらず、現在の NFS 実装の多くは変更通知もサポートしていないことに注意してください。多くの SMB/CIFS サーバー (特に安価な Network-Attached-Storage 組み込みシステムのサーバー) もサポートが制限されています。

于 2010-12-08T12:13:45.443 に答える