我有多个用户同时登录,他们可以同时写同一个文件。 当多个用户在nodejs中的单个文件上写入时,如何防止文件发生冲突。
答案 0 :(得分:0)
假设您只有一个节点进程,那么简单解决方案就是使用fs.writeFileSync
。
正确的方法是使用rwlock来正确锁定文件,这样一次只能有一个进程写入文件。
答案 1 :(得分:0)
好吧,fs.writeFileSync
将阻止事件循环,并将阻止Node事件队列中的其余异步函数。另一种更好的方法是使用像semaphore
这样的模块。
var sem = require('semaphore')(1);
var server = require('http').createServer(req, res) {
res.write("Start your file write sir");
sem.take(function() {
// Process your write to file using fs.writeFile
// And finish the request
res.end("Bye bye, your file write is done.");
sem.leave();
});
});
它会阻止任何其他HTTP请求,而不会阻塞整个事件循环,不要忘记是异步的!