如何实现多个Node.js进程使用fs.createWriteStream
写入同一文件的系统,以便它们不会覆盖数据?看起来fs.createWriteStream的默认设置是在调用该方法时清除文件。我的目标是清除文件一次,然后让所有其他后续编写者只附加数据。
我应该使用fs.createWriteStream
然后使用fs.appendFile
吗?或者有没有办法为每个进程打开一个流,而不仅仅是第一个打开文件的进程?
答案 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进行编排。
虽然速度较慢,但您有两种简单的方法: