Я работаю над небольшим приложением NodeJS, которое, по сути, выполняет функцию поиска на рабочем столе в браузере для сервера на основе локальной сети, который может запрашивать множество пользователей.Все пользователи в локальной сети имеют доступ к общей папке на этом сервере и традиционно используют просто размещение файлов в этой папке для общего доступа для всех, и я хочу сохранить этот процесс одинаковым.
Первое решениеЯ наткнулся на fs.watchFile , который был затронут в других вопросах, связанных со стековым потоком.В первом вопросе пользователь Иво Ветцель отметил, что в системе linux fs.watchFile использует inotify, но считает, что fs.watchFile не следует использовать для большого количества файлов /папки.
В другом вопросе о пользователе fs.watchFile tjameson впервые подтвердил, что в Linux inotify будет использоваться fs.fileWatch, и порекомендовал просто использовать комбинацию node-inotify-plusplus и node-walk , но еще раз заявил, что этот метод не следует использовать для большого количества файлов.С комментарием и ответом он предложил только наблюдать за измененным временем каталогов и затем повторно сканировать соответствующий каталог для изменений файла.
Мои самые большие препятствия, похоже, заключаются в том, что даже с предложением tjameson все еще существует жесткое ограничение на количество отслеживаемых папок (которых много и они растут).Кроме того, это должно быть сделано рекурсивно, потому что дерево каталогов является довольно глубоким и может также подвергаться изменениям в нижних ветвях, поэтому мне придется отслеживать следующее на каждом уровне папок (или альтернативно контролировать измененное время папок, а затемсканирование, чтобы выяснить, что произошло):
- создание файла или подпапки
- удаление файла или подпапки
- перемещение файла или подпапки
- удаление себя
- движение себя
Если предположить, что inotify имеет пределы в соответствии с тем, что было сказано выше, то мне одному кажется, что когда у менязначительное количество вложенных подпапок.По-настоящему удивительный способ выглядит так, как будто он включает kqueue , который я впоследствии нашел в качестве темы для обсуждения лучшего fs.fileWatch в группе Google .
КажетсяДля меня ясно, что ведение базы данных соответствующей информации о файлах и папках является подходящим направлением действий на стороне запросов, но проблема заключается в том, чтобы синхронизировать эту базу данных с фактическим состоянием файловой системы в соответствующих каталогах.
Так, что думает сообщество?Есть ли лучшее или хорошо известное решение для решения этой проблемы, о котором я просто не знаю?Лучше всего просто просмотреть все интересующие каталоги за одним изменением, например, измененным временем, а затем сканировать, чтобы выяснить, что произошло?Лучше ли смотреть все соответствующие предупреждения inotify и соответствующим образом изменять базу данных?Разве это не проблема, которую решает такой крестьянин, как я?