2

我已经用node.js. 这server会监听一个端口并通过一个端口将请求重新路由到另一个服务器http.request()

要重新路由消息的积压日志,我想将每条消息(单行信息)附加到一个文件中,并将日期作为文件名。

服务器将被多个设备以小 txt 字符串(800 字节)的交替间隔攻击。写入文件系统会隐式调用阻塞事件。有没有办法防止这种行为?

4

3 回答 3

3

如果 appendFile 不能正常工作,我自己测试了一个使用文件流的解决方案,该文件流适用于多个集群并且不会破坏输出

于 2012-06-26T19:46:53.170 回答
1

只需使用fs模块的异步方法,例如appendFile.

http://nodejs.org/api/fs.html#fs_fs_appendfile_filename_data_encoding_utf8_callback

于 2012-06-26T19:22:08.987 回答
0

这样的事情可能会有所帮助。

    var fs = require('fs');
    var writer = {
      files: {},
      appendFile: function(path, data) {
        if(this.files[path] === undefined) {
          this.files[path] = {open: false, queue: []};
        }
        this.files[path].queue.push(data);
        if(!this.files[path].open) {
          this.files[path].open = true;
          this.nextWrite(path);
        }
      },
      nextWrite: function(path) {
        var data = this.files[path].queue.shift(),
            self = this;
        if(data === undefined)
          return this.files[path].open = false;
        fs.appendFile(path, data, function(err) {
          if (err) throw err;
          self.nextWrite(path);
        });
      }
    }

fs.appendFile 需要 0.8.0 版本的节点,但它为每个文件保留一个队列,然后按照添加的顺序附加内容。它有效,但我没有花太多时间在它上面.. 所以只将它用于教育目的。

   writer.appendFile('test.txt','hello');
于 2012-06-26T23:14:41.243 回答