Tag: stream

Node.js:你能使用stream内的asynchronous函数吗?

考虑以下: var asyncFunction = function(data, callback) { doAsyncyThing(function(data){ // do some stuff return callback(err) }) } fs.createReadStream('eupmc_lite_metadata_2016_04_15.json') .pipe(JSONstream.parse()) .on('data', asyncFunction) // <- how to let asyncFunction complete before continuing 如何知道什么时候asyncFunction已经完成? 有没有什么办法从stream内使用asynchronous函数?

节点stream导致大量内存占用或泄漏

我正在使用节点v0.12.7,并希望直接从数据库stream到客户端(用于文件下载)。 不过,使用stream时,我注意到了大量的内存占用(可能会发生内存泄漏)。 使用express,我创build了一个端点,只需将可读stream传递给响应,如下所示: app.post('/query/stream', function(req, res) { res.setHeader('Content-Type', 'application/octet-stream'); res.setHeader('Content-Disposition', 'attachment; filename="blah.txt"'); //…retrieve stream from somewhere… // stream is a readable stream in object mode stream .pipe(json_to_csv_transform_stream) // I've removed this and see the same behavior .pipe(res); }); 在生产中,可读stream从数据库中检索数据。 数据量非常大(1M +行)。 我用一个虚拟stream(见下面的代码)换出了这个可读stream,以简化debugging,并注意到相同的行为:我的内存使用量每次跳跃大约200M。 有时候,垃圾收集器会启动,内存会下降一点,但会线性上升,直到我的服务器内存不足。 我开始使用stream的原因是不必将大量的数据加载到内存中。 这是行为吗? 我还注意到,在stream式传输的时候,我的CPU使用率跳跃到了100%,块(这意味着其他请求无法处理)。 我用这个不正确? 虚拟可读stream代码 // Setup a custom readable var Readable […]

如何克隆github仓库,然后在puppet上运行npm install

我已经制定了如何启动一个stream浪者箱和apt-get install包 我现在想在运行npm install之前从github中git clone一个node.js repo,并使用node app.js运行应用程序 我希望能通过发布BASH命令来实现这个目标,但是现在我看到木偶要求这样做是以一种傀儡的方式来完成的。 谷歌在这个问题上的结果是混乱和不一致的。 那么,如何告诉Puppet从github git clone一个node.js包,然后用npm install安装它?

“现在不能切换到旧模式” – ts..connect函数中的Node.JS apn模块错误

我试图实现Node.JS apn模块连接到APNS(Apple推送通知服务),以便从运行Ubuntu 12.04的Amazon EC2实例上托pipe的节点服务器(使用ExpressJS)向iPhone设备推送通知。 我得到这个错误: "Error: Cannot switch to old mode now.", " at emitDataEvents (_stream_readable.js:720:11)", " at ReadStream.Readable.resume (_stream_readable.js:705:3)", " at TLSSocket.<anonymous> (/home/ubuntu/usemebeta/routes/message.js:101:48)", " at TLSSocket.g (events.js:186:14)", " at TLSSocket.EventEmitter.emit (events.js:97:17)", " at TLSSocket.<anonymous> (_tls_wrap.js:579:16)", " at TLSSocket.EventEmitter.emit (events.js:97:17)", " at TLSSocket._finishInit (_tls_wrap.js:198:8)" 当我打电话给apn模块function推送通知。 但是,当我在一个写在一个文件中的函数做同样的事情并执行该文件,那么它工作得很好。 请帮忙。 我应该如何解决这个问题呢?

在Node中检测writeStream的结束

这是我得到的,而且我一直在收到一个错误,因为文件不存在,当我只是顺序执行。 如何在writeStreamclosures时触发一个动作? var fs = require('fs'), http = require('http'); http.createServer(function(req){ req.pipe(fs.createWriteStream('file')); /* i need to read the file back, like this or something: var fcontents = fs.readFileSync(file); doSomethinWith(fcontents); … the problem is that the file hasn't been created yet. */ }).listen(1337, '127.0.0.1');

从浏览器到服务器stream录制audio

我希望将来自浏览器的录制audio直播到服务器并播放。 服务器将最终成为播放这些audiostream的embedded式设备。 到目前为止,我已经成功录制了audio,并将其编码成WAVE文件,并使用networkingaudioAPI在浏览器上播放,并遵循本教程 。 现在我有一个.WAV编码的blobstream。 我试图find方法将这些stream与一个web套接字连接stream到一个nodejs后端,并使用npm模块播放它们。 但我没有运气。 有谁知道我应该遵循的任何资源或模块? 也许我应该尝试一种不同的方法? 自从在浏览器上logging以后,audio需要在服务器上相对快速地播放。

连接两个(或n个)stream

2stream: 给定可读stream stream1和stream2 , 获取包含stream1和stream2的stream的方式是什么是一种习惯的(简洁的)方式? 我不能做stream1.pipe(outStream); stream2.pipe(outStream) stream1.pipe(outStream); stream2.pipe(outStream) ,因为那么stream内容混杂在一起。 nstream: 给定一个EventEmitter ,发出不确定数量的stream,例如 eventEmitter.emit('stream', stream1) eventEmitter.emit('stream', stream2) eventEmitter.emit('stream', stream3) … eventEmitter.emit('end') 什么是一种习惯(简洁)的方式来获得所有stream串联在一起的stream ?

什么是一个正确的方法来暂停从可写的nodejspipe道可读stream?

我正在写一个模块,这是一个可写的stream。 我想为我的用户实现pipe道接口。 如果发生错误,我需要暂停可读stream并发出错误事件。 然后,用户将决定 – 如果他有错误,他应该能够恢复到数据处理。 var writeable = new BackPressureStream(); writeable.on('error', function(error){ console.log(error); writeable.resume(); }); var readable = require('fs').createReadStream('somefile.txt'); readable.pipe.(writeable); 我看到该节点为我们提供了可用于暂停可读stream的readable.pause()方法。 但我无法得到我可以从我的可写stream模块中调用它: var Writable = require('stream').Writable; function BackPressureStream(options) { Writable.call(this, options); } require('util').inherits(BackPressureStream, Writable); BackPressureStream.prototype._write = function(chunk, encoding, done) { done(); }; BackPressureStream.prototype.resume = function() { this.emit('drain'); } 如何在可写入的stream中实现背压? PS可以使用pipe/unpipe事件,提供可读stream作为参数。 但是也有人说,对于pipe道stream,暂停的唯一机会是从可写入的不可读可读stream。 我说得对吗? 我必须删除我的可写入stream,直到用户调用恢复? 而且,在用户调用恢复后,我应该将可读stream传回给用户?

节点subprocess执行命令失败,错误代码为1

我正在尝试执行一些使用节点jssubprocess和获取错误的行。 以下是我的代码: let cmd : string = "code " + PROJECTS[value]; exec(cmd, function callback(error, stdout, stderr) { console.log("started console app"); }); 错误: cmd:"C:\WINDOWS\system32\cmd.exe /s /c "code c:\Users\shana\Dropbox\code-settings-syn… (length: 82)" code:1 killed:false message:"Command failed: C:\WINDOWS\system32\cmd.exe /s /c "code c:\Users\shana\Dropbox\c… (length: 99)" signal:null stack:undefined 错误JSON的细节。 Full CMD : "C:\WINDOWS\system32\cmd.exe /s /c "code c:\Users\shana\Dropbox\code-settings-sync"" Full message : "Command […]

parsing一个stream而不削减

我正在阅读一个stream,这是testing与正则expression式: var deviceReadStream = fs.createReadStream("/path/to/stream"); deviceReadStream.on('data',function(data){ if( data.match(aRegex) ) //do something }); 但是由于河stream被分成几个大块,所以切入可能会让我错过一场比赛。 所以有一个更好的模式来连续testing一个正则expression式的stream? 更多细节 stream是崩溃的文件系统的内容。 我正在寻找一个ext2签名(0xef53)。 由于我不知道块是如何分裂的,签名可能被分割而不被检测到。 所以我使用了一个循环来自定义块的分割方式,即通过文件系统的块来分割。 但使用stream似乎是一个更好的模式,所以如何使用stream,同时定义自己的块大小?