繁体   English   中英

从node.js写入fifo

[英]Writing to fifo from node.js

每当有Web请求进入时,我都试图在我的node.js服务器中写一个fifo。我将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。

'x'不符合您的想法。 Node docs

独占模式( O_EXCL )确保新创建路径。 如果已经存在使用该名称的文件,则fs.open()失败。

您认为需要排他性的情况是什么? Node.js是单线程的,因此不可能对两个fs.write调用进行交织,以先出现者为准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM