在nodejs中有效地尾部文件

时间:2018-07-25 11:20:29

标签: node.js fs tail

我正在创建一个应用程序,该应用程序将监视一个文件并从该文件中获取内容(类似于tail,但也可能分页先前的数据)。我阅读了许多解决方案,从产生新进程到仅获取文件的更新字节,但在某些方面我还是有些困惑。

我要确切地执行以下操作:

  • 观看文件并在新数据进入文件时触发事件/回调
  • 从文件中读取此新数据,并将其有效发送到客户端。使用网络套接字或其他方式。 (建议您这样做是一种好方法)
  • 在客户端,获取这些数据并将其显示给用户,并不断使用新数据对其进行更新
  • 如果用户请求较旧的数据,以便从我们正在观看的文件中获取该数据,

我正在寻找上述子问题的有效解决方案,也欢迎寻求更好方法的任何建议。

仅供参考,我是Node.js的新手,因此您在解决方案中的冗长程度将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

注意变化

建议您看看chokidar,它是fs.watch,fs.events和本机node.js库的优化实现。

// Initialize watcher.
const watcher = chokidar.watch('some/directory/**/*.xml', config);

// Add event listeners.
watcher
  .on('add', path => log(`File ${path} has been added`))
  .on('change', path => log(`File ${path} has been changed`))
  .on('unlink', path => log(`File ${path} has been removed`));

获取更改的值

在这里您可以查看diff模块。并且您将需要存储先前文件和当前文件的状态。为了构建更改。

通知客户

您将需要创建一个websocket服务器,建议您使用socket.io,然后在您的应用程序中创建diff并将websocket消息发送到服务器。服务器将把消息通知/广播到所需的客户端。