Tag: stream

NodeJS – 如何stream缓冲请求主体

在下面的代码中,我不知道为什么req.pipe(res)不起作用,但也不会抛出一个错误。 一个预感告诉我,这是由于nodejs的asynchronous行为,但这是一个非常简单的情况下没有callback。 我错过了什么? http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('Echo service: \nUrl: ' + req.url); res.write('\nHeaders:\n' + JSON.stringify(req.headers, true, 2)); res.write('\nBody:\n'); req.pipe(res); // does not work res.end(); }).listen(8000); 这是curl: ➜ ldap-auth-gateway git:(master) ✗ curl -v -X POST –data "test.payload" –header "Cookie: token=12345678" –header "Content-Type:text/plain" localhost:9002 这是debugging输出(请参阅上传的主体): About to connect() to localhost port […]

Node.JS中的createReadStream

所以我用fs.readFile(),它给了我 “致命错误:CALL_AND_RETRY_LAST分配失败 – 进程内存不足” 由于fs.readFile()在调用callback之前将整个文件加载到内存中,我应该使用fs.createReadStream()吗? 这就是我以前用readFile做的事情: fs.readFile('myfile.json', function (err1, data) { if (err1) { console.error(err1); } else { var myData = JSON.parse(data); //Do some operation on myData here } } 对不起,我对stream式传输很陌生。 下面是正确的方式来做同样的事情,但与stream? var readStream = fs.createReadStream('myfile.json'); readStream.on('end', function () { readStream.close(); var myData = JSON.parse(readStream); //Do some operation on myData here }); 谢谢

承诺和不规则的callback

我使用蓝鸟玩弄一个承诺控制stream程。 Bluebird提供了一个用于将常规callback函数转换为promise函数的.promisify()方法,但是当函数不规则时,我不清楚该怎么做。 例如requestjs请求的方法签名是 request(url, callback) 在哪里callback err, res, body 而不是常规的 err, res 我应该如何将这个转换成承诺?

NodeJS通过stream复制文件非常缓慢

我正在用VMWare下的SSD在Node上复制文件,但性能非常低。 我运行的测量实际速度的基准如下: $ hdparm -tT /dev/sda /dev/sda: Timing cached reads: 12004 MB in 1.99 seconds = 6025.64 MB/sec Timing buffered disk reads: 1370 MB in 3.00 seconds = 456.29 MB/sec 但是,以下用于复制文件的节点代码非常慢,因此后续运行并不会使速度更快: var fs = require("fs"); fs.createReadStream("bigfile").pipe(fs.createWriteStream("tempbigfile")); 运行如下: $ seq 1 10000000 > bigfile $ ll bigfile -h -rw-rw-r– 1 mustafa mustafa 848M Jun 3 03:30 […]

从JavaScript对象创build一个Node.js可读stream – 最简单的方法

任何人都可以解释为什么我得到一个错误后运行节点v0.10.21下面的代码? 我意识到,我可以JSON.stringify()该对象,以实现或多或less相同的结果,这里的意义是要有意义的stream.Readable当objectMode设置为true时。 错误: net.js:612 throw new TypeError('invalid data'); ^ TypeError: invalid data at WriteStream.Socket.write (net.js:612:11) at write (_stream_readable.js:583:24) at flow (_stream_readable.js:592:7) at _stream_readable.js:560:7 at process._tickCallback (node.js:415:13) at Function.Module.runMain (module.js:499:11) at startup (node.js:119:16) at node.js:901:3 代码: var stream = require('stream'); var edad = require(__dirname + '/public/edad.json'); var rs = new stream.Readable({ objectMode: true }); rs.push(edad); rs.push(null); […]

asynchronous队列,文件stream结束时如何知道两者何时完成

使用async.queue与文件stream时,我遇到一个小问题 我有一个场景,我的文件stream将完成 我将fileRead设置为true 然而队列将是空的并且已经被称为排水 这导致我的“完成”永远不会被调用 我的文件stream是“结束”和队列是空的后,说“结束队列”的正确方法是什么? var fs = require('fs') , util = require('util') , stream = require('stream') , es = require('event-stream'); var async = require('async'); var fileRead = false; var lineNr = 0; var q = async.queue(function(task, callback) { task(function(err, lineData){ responseLines.push(lineData); callback(); }); }, 5); var q.drain = function() { if(fileRead){ done(null, responseLines); […]

如何在吞噬生成过程中将内容插入到文件中?

我设法完成我的任务使用一个叫做gulp插入的gulp插件像这样: gulp.task('compile-js', function () { // Minify and bundle client scripts. var scripts = gulp.src([ srcDir + '/routes/**/*.js', srcDir + '/shared/js/**/*.js' ]) // Sort angular files so the module definition appears // first in the bundle. .pipe(gulpAngularFilesort()) // Add angular dependency injection annotations before // minifying the bundle. .pipe(gulpNgAnnotate()) // Begin building source maps for […]

Nodejsstream媒体

我想使用Nodejs实现一个简单的客户端 – 服务器连接。 但是我遇到了以下问题。 考虑代码 server.js: var net = require('net'), sys = require('sys'); net.createServer(onConnection).listen(8124); function onConnection(socket) { socket.setNoDelay(true); socket.addListener("connect", function () { sys.puts('client connected: ' + this.remoteAddress); }); socket.addListener("data", function (data) { sys.puts("message: \n" + data + "\n – end of msg."); }); socket.addListener("end", function () { sys.puts('end of connection'); this.end(); }); } sys.puts('Server running […]

如何在Node.js中读取非常大(> 1GB)的tar.gz文件?

我从来没有这样做过,所以这可能是一个非常基本的东西,但我想我会问。 在Node.js中读取非常大的文件的正确方法是什么? 说这个文件太大,一次读不完。 也可以说文件可以以.zip或.tar.gz格式进入。 第一个问题,最好是先解压缩文件并保存到磁盘(我现在用Mac上的Stuffit来做这个),然后使用该文件? 或者你可以直接从压缩的.zip或.tar.gz版本读取IOstream? 我想你需要知道压缩文件中的内容的格式,所以你可能需要解压缩(只是发现这个.tar.gz文件实际上是一个.dat文件)… 那么主要的问题是,如何在Node.js中读取这个大文件? 说这是一个1GB的XML文件,我应该在哪里开始parsing它? (不是,如何parsingXML,但是如果您正在逐行阅读大文件,那么如何parsing需要知道前面行的上下文的XML)。 我已经看过fs.createReadStream ,但是我怕弄乱它…不想炸我的电脑。 只是在正确的方向寻找一些指针。

附加到SourceBuffer的MediaSource在第一次之后不起作用

我目前正尝试通过socket.io将.webmvideo文件传输到我的客户端(目前使用Chrome作为客户端)。 将第一个Uint8Array附加到SourceBuffer可以正常工作,但追加更多的不起作用并引发以下错误: Uncaught DOMException: Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null. 我目前的代码: 'use strict'; let socket = io.connect('http://localhost:1337'); let mediaSource = new MediaSource(); let video = document.getElementById("player"); let queue = []; let sourceBuffer; video.src = window.URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen', function() { sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); socket.on("video", function(data) { let uIntArray = new […]