我已经用node.js
. 这server
会监听一个端口并通过一个端口将请求重新路由到另一个服务器http.request()
要重新路由消息的积压日志,我想将每条消息(单行信息)附加到一个文件中,并将日期作为文件名。
服务器将被多个设备以小 txt 字符串(800 字节)的交替间隔攻击。写入文件系统会隐式调用阻塞事件。有没有办法防止这种行为?
我已经用node.js
. 这server
会监听一个端口并通过一个端口将请求重新路由到另一个服务器http.request()
要重新路由消息的积压日志,我想将每条消息(单行信息)附加到一个文件中,并将日期作为文件名。
服务器将被多个设备以小 txt 字符串(800 字节)的交替间隔攻击。写入文件系统会隐式调用阻塞事件。有没有办法防止这种行为?
如果 appendFile 不能正常工作,我自己测试了一个使用文件流的解决方案,该文件流适用于多个集群并且不会破坏输出
只需使用fs
模块的异步方法,例如appendFile
.
http://nodejs.org/api/fs.html#fs_fs_appendfile_filename_data_encoding_utf8_callback
这样的事情可能会有所帮助。
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');