Articles of node.js stream

从nodejs有效地serialise(和读取)int数组

我正在考虑在nodejs中构build一个应用程序,该应用程序需要传输包含整数数组的大型(> GB)文件。 至关重要的是,arrays需要最优化地进行序列化,所以不是基于ascii的,理想地,对于较小的整数(这将是绝大多数数据)使用8位,但仍然能够表示更大的数字。 这个问题可能比nodejs更多,但是如何在nodejs中进行呢? 是否有从磁盘自定义字节编码stream文件的现成解决scheme? 或者更好,整数数组? 理想情况下,应该可以将stream的每个部分解码为磁盘绑定而不是cpu绑定,即使是ssd也是如此。

Node.js – 如何获取stream到string

我有stream,我需要将stream内容转换为string。 我使用http.get从Internetstream式传输。 我也写stream到文件,但我不想写文件,然后打开同一个文件,并从它读取…所以我需要转换成string的stream感谢所有的build议…

Node.jsnetworking库:从“数据”事件获取完整的数据

我四处搜寻,要么找不到确切的问题,要么我需要有人向我解释,就像我5。 基本上,我有一个使用networking库的Node.js脚本。 我连接到多个主机,并发送命令,并侦听返回数据。 var net = require('net'); var nodes = [ 'HOST1,192.168.179.8', 'HOST2,192.168.179.9', 'HOST3,192.168.179.10', 'HOST4,192.168.179.11' ]; function connectToServer(tid, ip) { var conn = net.createConnection(23, ip); conn.on('connect', function() { conn.write (login_string); // login string hidden in pretend variable }); conn.on('data', function(data) { var read = data.toString(); if (read.match(/Login Successful/)) { console.log ("Connected to " + ip); […]

如何确保在stream完成处理后执行asynchronous代码?

我有一个stream,通过侦听data , error和end事件来处理,我调用一个函数来处理第一个stream中的每个data事件。 当然,处理数据的函数会调用其他callback函数,使得它是asynchronous的。 那么当stream中的数据被处理时,我该如何开始执行更多的代码呢? 在stream中收听end事件并不意味着asynchronousdata处理function已经完成。 当我执行下一个语句时,如何确保stream数据处理函数完成? 这里是一个例子: function updateAccountStream (accountStream, callThisOnlyAfterAllAccountsAreMigrated) { var self = this; var promises = []; accountStream .on('data', function (account) { migrateAccount.bind(self)(account, finishMigration); }) .on('error', function (err) { return console.log(err); }) .on('end', function () { console.log("Finished updating account stream (but finishMigration is still running!!!)"); callThisOnlyAfterAllAccountsAreMigrated() // finishMigration is still running! […]

“可读”事件发生两次

var fs = require('fs'); var file = fs.createReadStream('./zeros.txt'); var dataSize = 0; file.on('readable', function () { var data = file.read(10); console.log('readable size = ', data.length); console.log(data.toString()); }); Thie文件“zeros.txt”包含700个字符“0” 据我所知,在调用read(10)后,stream必须停止并等待一个新的read()调用。 但是,调用的结果是: readable size = 10 0000000000 readable size = 10 0000000000

节点js文件系统:未调用可读stream的结束事件

我试图提取一个.tar文件(从一个目录打包),然后检查提取的目录中的文件的名称。 我正在使用tar-fs来提取tar文件,然后使用fs.createReadStream来处理数据。 这是迄今为止我所得到的: fs.createReadStream(req.files.file.path) .pipe(tar.extract(req.files.file.path + '0')) .on('error', function() { errorMessage = 'Failed to extract file. Please make sure to upload a tar file.'; }) .on('entry', function(header, stream, callback) { console.error(header); stream.on('end', function() { console.error("this is working"); }); }) .on('end', function() { //the one did not get called console.error('end'); }) ; 我希望提取整个文件夹,然后检查文件名称。 那么,我还没有那么远 就我的理解,我在pipe道后面得到了一个可读的stream。 一个可读的stream有一个结束事件? […]

如何等待所有节点stream完成/结束?

我有一个每24小时运行一次CRON的子节点进程。 当进程开始时,它会读取一些排队数据,并将该数据推送到某个转换stream。 这个stream然后作为一个逆多路复用器,并将stream分成多个stream,最终解决,但他们都是asynchronous的。 我需要终止所有这些stream完成后创build的subprocess。 我的问题是,你怎么知道什么时候所有的stream都完成了? 尝试: 我试图使用EventEmitter的“完成”事件,但似乎在第一个反向多路复用stream结束(这是一口:) :)时被捕获。 基于承诺的方法。 所以这种方法是有效的,但我认为有一个更简单的方法来做这样的事情。 基本上,这导致为每个反向复用stream水线创build一个承诺,当每个stream水线完成时,我们解决了这个承诺。 然后,当所有的承诺都已经解决了,一个事件被触发,我们在其他地方捕获这个事件来终止这个过程。

用于node.js进程的额外stdiostream

当生成subprocess时,node.js API文档使用额外的stdio(fd = 4): // Open an extra fd=4, to interact with programs present a // startd-style interface. spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] }); 该stdio通过ChildProcess.stdio[fd]可用于父进程。 孩子如何能够访问这些额外的工作室? 让我们在文件描述符3(fd = 3)上使用stream而不是pipe道。 /* parent process */ // open file for read/write var mStream = fs.openSync('./shared-stream', 'r+'); // spawn child process with stream object as […]

故障排除错误:在nodejsstream冒险教程中连接ECONNREFUSED

我一直在学习learnyoujs和stream冒险的教程: https://github.com/substack/stream-adventure https://github.com/rvagg/learnyounode#learn-you-the-nodejs-for-much-win 我已经完成了第一套,大部分都是通过第二套的,但是我总是得到一个奇怪的错误…通常我可以让它消失。 这是命令/错误: DEV / javascript / streamAdventure»stream冒险运行httpserver.js stream.js:94 throw er; // Unhandled stream error in pipe. ^ Error: connect ECONNREFUSED at errnoException (net.js:901:11) at Object.afterConnect [as oncomplete] (net.js:892:19) 这将启动但不杀死节点的过程,所以我ps aux | grep节点,然后find进程并杀死它。 以下是教程中的“工作”代码: var http = require('http'); var through = require('through'); var server = http.createServer(function (req, res) { if (req.method === 'POST') […]

Node.js:分割n部分的stream内容

我试图了解节点stream和它们的生命周期。 所以,我想分割stream的内容为n部分。 下面的代码只是为了解释我的意图,并表明我已经自己尝试了一些东西。 我省略了一些细节 我有一个stream只是产生一些数据(只是一个数字序列): class Stream extends Readable { constructor() { super({objectMode: true, highWaterMark: 1}) this.counter = 0 } _read(size) { if(this.counter === 30) { this.push(null) } else { this.push(this.counter) } this.counter += 1 } } const stream = new Stream() stream.pause(); 一个函数,试图采取下一个块: function take(stream, count) { const result = [] return new Promise(function(resolve) […]