Tag: 文件io

文件收集和聚合结果报告的操作与非阻塞IO

我想对任意大的文件进行一些任意的昂贵的工作。 我想实时报告进度,然后在所有文件处理完毕后显示结果。 如果没有与我的expression式匹配的文件,我想抛出一个错误。 想象一下,编写一个testing框架,加载所有testing文件,执行它们(不按特定顺序),实时报告进度,然后在所有testing完成后显示聚合结果。 用阻塞语言(比如Ruby)编写这个代码非常简单。 事实certificate,在节点中执行这个看似简单的任务时遇到了问题,同时也真正利用了基于事件的asynchronousIO。 我的第一个devise是连续执行每一步。 加载所有的文件,创build一个文件集合进行处理 处理集合中的每个文件 在处理完所有文件后报告结果 这种方法确实有效,但对我来说看起来并不完全正确,因为它导致我的程序中计算量更大的部分等待所有的文件IO完成。 Node是不是被devise来避免的那种等待? 我的第二个devise是处理每个文件,因为它是在磁盘上asynchronous发现的。 为了争辩,让我们设想一下这样的方法: eachFileMatching(path, expression, callback) { // recursively, asynchronously traverse the file system, // calling callback every time a file name matches expression. } 而这种方法的消费者看起来像这样: eachFileMatching('test/', /_test.js/, function(err, testFile) { // read and process the content of testFile }); 虽然这个devise感觉像是一个非常“节点”的IO工作方式,它有两个主要问题(至less在我大概是错误的实现): 我不知道什么时候所有的文件都被处理了,所以我不知道什么时候汇编和发布结果。 由于文件读取是非阻塞的,recursion的,我正在努力如何知道是否没有find文件。 我希望我只是在做一些错误的事情,并且有一些合理简单的策略,其他人用第二种方法工作。 […]

如何从node.js中到达太快的偶数input逐个写入数据库

我使用繁琐的驱动程序接收来自MS SQL SELECT查询的input。 我已经附加了一个听众的读者“行”事件: request.on('row', function(columns) { insert_row_other_db(columns); }); 我正在将结果写入insert_row_other_db函数中的另一个数据库。 但是这些行的到达速度要比它们能够写得快得多,我只想打开一个连接。 什么是一个很好的方式去de-asyncronyze写入其他数据库? 我想一个接一个地写行。

createWriteStream vs writeFile?

这两个操作之间的基本区别是什么? someReadStream.pipe(fs.createWriteStream('foo.png')); VS someReadStream.on('data', function(chunk) { blob += chunk } ); someReadStream.on('end', function() { fs.writeFile('foo.png', blob) }); 当使用请求库进行抓取时,我只能使用前一种方法保存图片(png,bmp)等,而后者则有相同的gibbersh(二进制)数据,但图像不会呈现。 他们有什么不同?

NodeJS如何处理asynchronous文件IO?

在NodeJS上工作了一段时间,我一直在想如何在内部处理文件操作。 考虑到下面的伪代码: initialize http server on connection: modify_some_file: on success: print "it worked" 让我们考虑几乎同时尝试访问该页面的两个用户A和B. 让我们进一步假设A是第一个连接,那么发生以下事情: A连接 NodeJS初始化文件操作,并告诉操作系统完成后通知操作系统 这是我想知道的:假设文件操作还没有完成,B连接,节点做什么? 如何在什么时候访问文件,还在进行“被修改”? 我希望我的问题有些清楚;)期待你的答案!

I / O绑定和CPU绑定

喜。 我用Node.JS使用child_process来产生bash进程。 我试图了解,如果我正在做I / O绑定,CPU绑定或两者兼而有之。 我正在使用pdftotext来提取10k +文件的文本。 为了控制并发,我使用asynchronous 。 码: let spawn = require('child_process').spawn; let async = require('async'); let files = [ { path: 'path_for_file' … }, … ]; let maxNumber = 5; async.mapLimit(files, maxNumber, (file, callback) => { let process = child_process.spawn('pdftotext', [ "-layout", "-enc", "UTF-8", file.path, "-" ]); let result = ''; let […]

如何使用stream到JSONstring在Node.js中的大型嵌套对象?

我有一个大的JavaScript对象,我想转换为JSON并写入一个文件。 我以为我可以用像这样的stream来做到这一点 var fs = require('fs'); var JSONStream = require('JSONStream'); var st = JSONStream.stringifyObject() .pipe(fs.createWriteStream('./output_file.js')) st.write(large_object); 当我尝试这个时,我得到一个错误: stream.js:94 throw er; // Unhandled stream error in pipe. ^ TypeError: Invalid non-string/buffer chunk at validChunk (_stream_writable.js:153:14) at WriteStream.Writable.write (_stream_writable.js:182:12) 所以显然我不能只写一个对象到这个stringifyObject 。 我不确定下一步是什么。 我需要将对象转换为缓冲区? 通过一些转换stream来运行对象,并将其传递给strinigfyObject

Node.js中的面向行的stream

我正在开发一个使用Node.js的多进程应用程序。 在这个应用程序中,父进程会产生一个subprocess,并通过pipe道使用基于JSON的消息传递协议与其进行通信。 我发现大的JSON消息可能会被“截断”,使得发送到pipe道上的数据侦听器的单个“块”不包含完整的JSON消息。 此外,小JSON消息可能被分组在同一块中。 每个JSON消息将由一个换行符分隔,所以我想知道是否已经有一个实用程序将缓冲pipe道读取stream,使它一次发出一行(因此,对于我的应用程序,一个JSON文档一次)。 这似乎是一个很常见的用例,所以我想知道是否已经完成。 我会很感激任何人可以提供的指导。 谢谢。

在amazon ec2实例中处理I / O请求

学习节点后,JavaScript和所有其余的困难的方式,我终于要释放我的第一个Web应用程序。 所以我订阅了amazon web services,并创build了一个微型实例,计划在第一年的免费层 ,让我的应用程序提供给世界。 我更关心隐藏成本。 我知道,免费层每月为Amazon EC2 EBS提供100万次I / O请求。 事情是,我开始testing我的应用程序一个EC2实例来检查一切运行正常; 而且我已经有超过10万个I / O请求 。 我基本上是迄今为止唯一使用它的实例 ( 实例运行37小时 )。 所以我很担心如果我的应用程序获得一些stream量会发生什么事情,而且我不想在本月底结束一个巨大的意外账单。 我觉得很奇怪,因为我主要服务于静态的东西,而我的服务器端代码包括: 从客户端接收search请求 1个http请求到一个网站 1 https请求的YouTube的API 将数据保存到mongoDB 将结果发送给客户端 你有什么build议,如何大幅度减less我的IO? 我目前还没有使用其他亚马逊服务,也许我错过了什么? 或者,也许亚马逊免费层在我的情况下不够,但那么它可以足够呢? 我的意思是,我的应用程序毕竟是非常简单的。 我很乐意为您提供任何帮助 谢谢!

欢迎来到socket.io。 只有消息

我正在使用socket.io和nodejs作为我的第一个应用程序,就像socket.io官方网站上说的,但是运行node.server后,我在html上看到的唯一一件事就是“Welcome to socket.io”。 我怎样才能解决这个问题? 或者为什么会这样呢? 代码如下: index.html <script src="http://my.page/node_modules/socket.io/lib/socket.io.js"></script> <script> var socket = io.connect('http://abogados.pages/'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> server.js var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 我真的很感激任何答案,因为如果不是,我不能从socket.io开始!

如何处理callback函数中的响应(例如nodejs中的cradle)

我在“nodejs”中使用“express”和“cradle”。 如果我请求我的数据库,我必须定义一个callback来处理响应。 不幸的是我没有访问res(响应)在我的callback函数。 这个问题的最佳做法是什么? 这是我的代码。 var cradle = require('cradle'); var db = new cradle.Connection().database('guestbook'); app.get('/guestbook', function(req, res) { db.view('guestbook/all', function(err, doc) { console.log(doc); // How can I use res in this callback // to send the response? }); });