Подтвердить что ты не робот

Наблюдайте за изменениями файлов с помощью node.js

У меня есть следующая UseCase:

A создает чат и приглашает B и C. На сервере A создается Файл. A, B и C записывают сообщения в этот файл. A, B и C читайте это файл.

Я хочу создать файл на сервере и наблюдать за этим файлом, если кто-то еще что-то пишет в этот файл, отправит новое содержимое обратно с помощью websockets.

Итак, любое изменение этого файла должно наблюдаться в моем приложении node.js.

Как я могу наблюдать за изменениями файлов? Возможно ли это с помощью node js без блокировки файлов?

Если это невозможно с файлами, возможно ли это с объектом базы данных (NoSQL)

4b9b3361

Ответ 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.');
});