Observe los cambios de archivos con node.js

Tengo el siguiente UseCase:

A crea un Chat e invita a B y C: en el Servidor A crea un Archivo. A, B y C escriben mensajes en este archivo. A, B y C leen este archivo.

Quiero crear un archivo en el servidor y observar este archivo si alguien más escribe algo en este archivo, envíe el nuevo contenido con websockets.

Por lo tanto, cualquier cambio de este archivo debe ser observado por mi aplicación node.js.

¿Cómo puedo observar los cambios de archivos? ¿Es esto posible con el nodo js sin bloquear los archivos?

Si no es posible con los archivos, sería posible con el objeto de base de datos (NoSQL)

La buena noticia es que puedes observar cambios de archivos con la API de Node.

Leer el documento API de Node.js es muy útil para resolver estos problemas. Es una fuente invaluable. 🙂

Sin embargo, esto no le da acceso a los contenidos que se han escrito en el archivo. Quizás puedas usar fs.appendFile(); función para que cuando se escribe algo en el archivo, se emita un evento a otra cosa que “registre” los datos nuevos que se escriben.

fs.watch(): pegado directamente de los documentos

 fs.watch('somedir', function (event, filename) { console.log('event is: ' + event); if (filename) { console.log('filename provided: ' + filename); } else { console.log('filename not provided'); } }); 

Lea aquí sobre fs.watch (); función

EDITAR : Puedes usar la función

 fs.watchFile(); 

Lea aquí sobre fs.watchFile (); función

Esto le permitirá ver un archivo de cambios. Es decir. siempre que sea accedido por otros procesos de cualquier tipo.

También podría usar node-watch . Aquí hay un ejemplo fácil:

 const watch = require('node-watch') watch('README.md', function(event, filename) { console.log(filename, ' changed.') }) 

No creo que tenga que observar cambios de archivos o usar una base de datos NoSQL para esto (si no lo desea). Mi consejo sería mirar los eventos ( patrón Observer ). Hay más que suficientes tutoriales sobre este tema disponibles en línea (Google). Por ejemplo, el artículo de Felix sobre el uso de EventEmitters

Esta semántica de publicación / suscripción también se puede lograr con NoSQL. En Redis, por ejemplo, creo que deberías echarle un vistazo a pubsub .

En MongoDB creo que los cursores disponibles son lo que estás buscando. En su blog tienen una publicación que explica pub / sub .