fs.createWriteStream在几个进程上

时间:2016-04-16 00:53:14

标签: node.js fs

如何实现多个Node.js进程使用fs.createWriteStream写入同一文件的系统,以便它们不会覆盖数据?看起来fs.createWriteStream的默认设置是在调用该方法时清除文件。我的目标是清除文件一次,然后让所有其他后续编写者只附加数据。

我应该使用fs.createWriteStream然后使用fs.appendFile吗?或者有没有办法为每个进程打开一个流,而不仅仅是第一个打开文件的进程?

2 个答案:

答案 0 :(得分:2)

  

我应该使用fs.createWriteStream然后使用fs.appendFile吗?

你可以使用。

使用fs.createWriteStream你必须改变这样的标志:

fs.createWriteStream('your_file',{
  flags: 'a+', // default is 'w' (just 'a' might be enough here, i'm not sure)
})

如果该文件不存在,则应该创建该文件,如果该文件存在则将其打开并将其设置为end。 (追加模式)

如何使用fs.appendFile应该是明确的,并且几乎完全相同。

现在多个进程访问同一文件的问题。显然,只有一个进程可以同时打开具有写访问权限的同一文件。 因此,如果另一个进程具有写访问权限,则需要等待文件被释放。你可能需要一个库。

这个例如:https://www.npmjs.com/package/lockup
或者这一个:https://github.com/Perennials/mutex-node 你还可以在这里找到更多:https://www.npmjs.com/browse/keyword/lock
或在此:https://www.npmjs.com/browse/keyword/mutex

我没有尝试过任何这些库,但是我发布的那个和列表中的其他几个库应该完全符合你的需要。

答案 1 :(得分:0)

从多个进程写入单个文件,以确保数据完整性,这是一个相当复杂的操作,您可以使用File locking进行编排。

虽然速度较慢,但​​您有两种简单的方法:

  1. 为每个进程写一个临时文件,然后连接 操作结束时保存文件。
  2. 将需要编写的内容传输到专用的单个进程,并将编写执行委托给它。请记住,在进程之间发送消息可能会很昂贵。 Have a look a this great answer