首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从node.js写入先进先出

从node.js写入先进先出
EN

Stack Overflow用户
提问于 2012-10-24 11:23:44
回答 1查看 3.1K关注 0票数 0

每当有web请求进入时,我都会尝试写入node.js服务器中的先进先出。我使用fifo作为一个任务队列,这样另一个程序就可以读取它并做一些耗时的工作。

到目前为止,我的node.js服务器的代码如下:

代码语言:javascript
复制
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.');
      }
    }
  });
});

当此代码运行时,它输出以下内容:

代码语言:javascript
复制
Error: EEXIST, open '/tmp/myfifo'

我是不是做错了?

注意:我使用带有'wx'标志的fs.open(...)来确保输入按顺序写入先进先出,例如当10个请求同时进入时,这样它们就不会同时写入先进先出。

EN

回答 1

Stack Overflow用户

发布于 2012-10-24 12:43:23

'x'并不是你想的那样。从Node docs

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

您认为需要排他性的情况是什么?Nodejs是单线程的,所以两个fs.write调用是不可能交错的,无论哪个先出现都会先写入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13042556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档