0
我试图在我的node.js服务器中写入一个fifo,只要有web请求进来。我将fifo用作任务队列,以便另一个程序可以读取它并做一些耗时的工作。从node.js写入fifo
到目前为止,我有代码为我的node.js这样的服务器:
fs = require('fs');
...
var fifoPath = '/tmp/myfifo';
var input = 'some input';
fs.open(fifoPath, 'wx', 0644, function(error, fd) {
if (error) {
if (fd) {
fs.close(fd);
}
console.log('Error opening fifo: ' + error);
return;
}
fs.write(fd, input, 0, input.length, null, function(error, written, buffer) {
if (fd) {
fs.close(fd);
}
if (error) {
console.log('Error writing to fifo: ' + error);
} else {
if (written == input.length) {
console.log('Input has been written successfully!';
} else {
console.log('Error: Only wrote ' + written + ' out of ' + input.length + ' bytes to fifo.');
}
}
});
});
运行此代码时,其输出如下:
Error: EEXIST, open '/tmp/myfifo'
难道我不当这样做呢?
注意:我使用fs.open(...)
和'wx'
标志来确保输入按顺序写入fifo,例如,当10个请求同时进入时,所以他们并不全部同时写入FIFO。
我明白了,谢谢你指出独家模式。 至于fs.write是交错的,如果两个web请求同时进入,fs.open(...)不会被调用两次?然后他们每个人都会调用'fs.write(...)'这可能会同时运行,因为'fs.write(...)'调用是异步的。还是有我失踪的东西?你是说fs.open()只能处理一个请求,并且在写入时,另一个请求无法打开文件? – Addison