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