Наблюдайте за изменениями файлов с помощью node.js
У меня есть следующая UseCase:
A создает чат и приглашает B и C. На сервере A создается Файл. A, B и C записывают сообщения в этот файл. A, B и C читайте это файл.
Я хочу создать файл на сервере и наблюдать за этим файлом, если кто-то еще что-то пишет в этот файл, отправит новое содержимое обратно с помощью websockets.
Итак, любое изменение этого файла должно наблюдаться в моем приложении node.js.
Как я могу наблюдать за изменениями файлов? Возможно ли это с помощью node js без блокировки файлов?
Если это невозможно с файлами, возможно ли это с объектом базы данных (NoSQL)
Ответы
Ответ 1
Хорошей новостью является то, что вы можете наблюдать файлы с помощью Node API.
Чтение документа Node.js API очень полезно при вычислении этих вещей.
Это бесценный источник.:)
Однако это не дает вам доступ к содержимому, которое было записано в файл.
Возможно, вы можете использовать функцию fs.appendFile();
, чтобы, когда что-то записывается в файл, вы передаете событие другому, которое "регистрирует" ваши новые данные, которые записываются.
fs.watch():
Непосредственно вставлено из документов
fs.watch('somedir', function (event, filename) {
console.log('event is: ' + event);
if (filename) {
console.log('filename provided: ' + filename);
} else {
console.log('filename not provided');
}
});
Читайте здесь о fs.watch(); Функция
EDIT. Вы можете использовать функцию
fs.watchFile();
Читайте здесь о fs.watchFile(); Функция
Это позволит вам просматривать файл для изменений. То есть. всякий раз, когда к нему обращаются какие-либо другие процессы любого рода.
Ответ 2
Я не думаю, что вам нужно наблюдать за изменениями файлов или использовать для этого базу данных NoSQL (если вы этого не хотите). Мой совет: посмотреть events (Шаблон наблюдателя). Есть более чем достаточно учебников по этой теме, доступных в Интернете (Google). Например, статья Феликса о Использование EventEmitters
Эта семантика публикации/подписи также может быть достигнута с помощью NoSQL. Например, в Redis, я думаю, вам стоит взглянуть на pubsub.
В MongoDB я думаю, что tailable cursors - это то, что вы ищете. На своем блоге у них есть сообщение, объясняющее pub/sub.
Ответ 3
Также вы можете использовать node-watch. Вот простой пример:
var watch = require('node-watch');
watch('README.md', function(filename) {
console.log(filename, ' changed.');
});