Использовать libfuse в проекте, без рут-доступа (для установки)? FTP монтирует и inotify / kqueue / FSEvents - PullRequest
1 голос
/ 01 декабря 2010

Я бы хотел, чтобы мое приложение отображало список каталогов с удаленного FTP (или SFTP и т. Д.) Местоположения. Когда файл / каталог изменяется в дереве удаленного каталога, приложение должно обновить свое представление соответствующими изменениями.

Поскольку обход всего дерева медленный и расточительный, я бы хотел использовать что-то вроде FSEvents (inotify / kqueues в Linux), но, очевидно, эти библиотеки основаны на файловой системе, и соединение с сервером FTP не то же самое, что смонтированная файловая система.

Для того, чтобы эти библиотеки работали, мне нужно на самом деле смонтировать файловую систему с поддержкой FTP / SFTP на локальном компьютере, а затем подключить FSEventStream (или kqueue и т. Д.) К этому локальному монтированию. Я знаю, что FUSE может это сделать, но есть ли способ использовать FUSE без необходимости его установки пользователем? Я имею в виду, могу ли я связать его с моим (Mac) приложением и создать монтирование, не заставляя пользователя проходить процесс установки пакета установки для копирования libfuse и модулей ядра в систему? Предполагается ли, что существует /dev/fuse, или он может существовать вне пути /dev/ внутри каталога моего приложения?

Хорошие Mac-приложения устанавливаются простым перетаскиванием, и я хотел бы сохранить мои так, если это возможно. Мне неясно, возможно ли использовать libfuse напрямую (при условии, что файлы включены в приложение), без установки его в системных путях.

В качестве альтернативы, у кого-нибудь есть другие предложения по мониторингу изменений по FTP без опроса?

1 Ответ

2 голосов
/ 08 декабря 2010

К сожалению FTP и SFTP не поддерживают какие-либо формы клиентских уведомлений.

Как и HTTP, они основаны на схеме запрос / ответ, где каждая передача данных инициируется клиентом. Хуже всего то, что, в отличие от HTTP, нет способа попросить сервер сообщить клиенту о любых изменениях с определенной даты.

Это означает, что не только вы должны использовать опрос, но и что указанный опрос ни в коем случае не будет легким.

Что касается FUSE, большинство доступных модулей FTP и SFTP обновляют свой вид файловой системы только тогда, когда приложения пользовательского пространства запрашивают список каталогов (например, нажимая кнопку Обновить в окне файлового браузера). Они не проводят опрос самостоятельно. Ваше пользовательское приложение должно будет инициировать обновление, опросив сам каталог.

EDIT:

Чтобы прояснить некоторые моменты, последние версии FUSE поддерживают события уведомлений. Oни просто проходите через события от модулей к ядру. Модули по-прежнему должны генерировать их, а в случае клиентского модуля FTP / SFTP это невозможно без опроса сервера.

Также имейте в виду, что многие текущие реализации NFS также не поддерживают уведомления об изменениях, несмотря на то, что NFSv4.1 имеет необходимые положения. Многие SMB / CIFS-серверы (особенно в дешевых встроенных системах Network-Attached-Storage) также не имеют поддержки.

...