웹 요청이 들어올 때마다 내 node.js 서버의 fifo에 쓰려고합니다. fifo를 작업 대기열로 사용하여 다른 프로그램에서 읽을 수 있습니다. 시간을 많이 소비하는 작업을 수행하십시오.fifo에서 node.js로 쓰기
지금까지이 같은 내 Node.js를 서버에 대해 코드를 가지고 :
Error: EEXIST, open '/tmp/myfifo'
내가 잘못이 일을하고 있는가 :
이 코드가 실행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.');
}
}
});
});
, 그것은 다음과 같은 출력?
참고 : 입력이 FIFO에 순차적으로 쓰여지는지 확인하기 위해 'wx'
플래그와 함께 fs.open(...)
플래그를 사용하고 있습니다. 동시에 10 개의 요청이 들어올 때 동시에 모든 요청을 FIFO에 쓰는 것은 아닙니다.
독점 모드에 대해 지적 해 주셔서 감사합니다. fs.write가 인터리브되어있는 경우 두 개의 웹 요청이 동시에 들어 오면'fs.open (...) '이 두 번 호출되지 않습니까? 그렇다면 그들 각각은'fs.write (...)'를 호출 할 것이고 이것은'fs.write (...)'호출이 비동기이기 때문에 동시에 실행될 것입니다. 아니면 제가 빠진 것이 있습니까? fs.open()은 하나의 요청에 대해서만 성공할 것이며, 쓰는 동안 다른 요청은 파일을 열 수 없다고 말하고 있습니까? – Addison