Tag: stream

如何在Node.js中使用Stream.Writable的drain事件

在Node.js中,我使用fs.createWriteStream方法将数据附加到本地文件。 在Node文档中,他们提到使用fs.createWriteStream时的drain事件,但我不明白。 var stream = fs.createWriteStream('fileName.txt'); var result = stream.write(data); 在上面的代码中,如何使用漏极事件? 下面的事件是否正确使用? var data = 'this is my data'; if (!streamExists) { var stream = fs.createWriteStream('fileName.txt'); } var result = stream.write(data); if (!result) { stream.once('drain', function() { stream.write(data); }); }

Node.js,Express,MongoDB和stream

我正在寻找通过Node.js服务器层将数据从MongoDBstream式传输到Web客户端的最佳方式。 我正在请求每个查询大约10MB的数据,并且查询已经在day_timestamp上编制索引。 请注意, 我已经阅读了这篇文章。 我正在使用的唯一的Mongo相关模块如下(我需要别人来实现我的目标?): MongoClient = require('mongodb').MongoClient; 目前我的代码看起来像这样: MongoClient.connect('mongodb://host:port/myDatabase', function(err, db) { if(err) throw err; console.log("Connected to Database"); // Server picks up URL requests made by browser app.get("/:type/:category/:resolution/:from/:to/", function (req, res){ var start = moment(); var type = String(req.params.type) ,category = String(req.params.category) ,resolution = String(req.params.resolution) ,from = moment.utc(req.params.from).toDate() ,to = moment.utc(req.params.to).toDate() ,options = { […]

将数据configuration为尚未准备好接收数据的可写入stream

有没有办法将可读stream连接到Node.js中的可写入stream,其中写入器尚未准备好接收数据? 换句话说,我想将可读性和可写性连接起来,但是我想在程序的稍后阶段初始化可写,包括定义写入方法。 也许我们必须实现写入方法,但有没有办法以类似的方式暂停可写入的stream,在这种方式中可以暂停可读的stream? 或者,也许我们可以使用中间通过/变换stream并在那里将数据缓冲在那里,然后再将数据传输到可写入数据中! 举例来说,我们通常会这样做: readable.pipe(transform).pipe(writable); 但我想要做一些事情: const tstrm = readable.pipe(transform); doSomethingAsync().then(function(){ tstrm.pipe(writable); }); 只是想知道这是否可能,如何做到这一点,到目前为止无法解决这两个问题。 我想我正在寻找缓冲中间转换stream中的数据,然后连接/pipe理一个可写入的stream,然后,一旦连接,在任何新的数据之前先stream缓冲的数据。 似乎是一个合理的事情,不能find任何信息。

Node.js http请求stream水线

所以,我想使用node.js和http请求stream水线,但我只想使用HTTP作为传输,没有别的。 我有兴趣利用请求stream水线function。 但是,我遇到的一个问题是,直到发送对前一个请求的响应,下一个请求的callback才不会被节点触发。 我想要一个能够做到这一点的方法。 我将在申请中处理结果的sorting。 有没有办法做到这一点? HTTP RFC提到,响应应该是有序的,但是我没有看到node.js没有任何理由不能调用下一个callback,直到第一个响应。 应用程序在理论上可以将对第二个查询的响应作为对第一个响应的响应发送(只要接收者知道这是对第二个响应的响应)。

Node.js的可写stream和排水事件

write()的文档说: 返回false表示内核缓冲区已满,数据将在未来发送出去。 和drain事件的文件说: 在write()方法返回false之后,会发出此事件以指示再次写入是安全的。 那是什么意思? 在我能再次写信之前,我是否必须等待drain事件? 我试图写的数据发生了什么? 这是失去了吗? 当我打电话写而不等待drain事件时会发生什么?

iPhone上的HTTP实时stream媒体服务器

我试图在iPhone上运行HTTP实时stream媒体服务器,该服务器捕获来自摄像机的videostream并将其提供给HTML5客户端(它支持HTTP实时stream式传输)。 到目前为止,我有以下工作。 iOS上的HTTP Livestream媒体服务器(用Node.js编写),它从video捕获模块生成的传输stream(video/ MP2T)文件列表中dynamic更新索引文件。 video捕捉模块,它使用AVCaptureMovieFileOutput连续产生一系列10秒的QuickTime文件(它们之间有一个小的差距,但它足够小,我的应用程序)。 我需要的是一个即时转换器,它将每个QuickTime文件转换为一个传输stream文件(无需更改编码,我只需要一个不同的容器),它将上面的两个模块桥接起来。 我正在采取这种方法,因为据我所知,这是利用iPhone的硬件video编码器的唯一方法(我在这里已经做了相当多的研究,我很确定,请让我知道我是否错了)。 less数人提出了ffmpeg,但是我宁愿使用MIT许可证(如果有的话)使用更小的代码,或者从头开始写一些东西(并且使用MIT许可证开放源代码)。 我对这个媒体容器很陌生,如果有人能指出我正确的方向(示例代码,开源,文档,…),我真的很感激。

如何实现基本节点Stream.Readable示例?

我正在尝试学习stream,并有一点问题让它正常工作。 对于这个例子,我只是想推动一个静态对象的stream和pipe道到我的服务器响应。 这是我迄今为止,但很多不起作用。 如果我甚至可以让stream输出到控制台,我可以弄清楚如何将其输出到我的响应。 var Readable = require('stream').Readable; var MyStream = function(options) { Readable.call(this); }; MyStream.prototype._read = function(n) { this.push(chunk); }; var stream = new MyStream({objectMode: true}); s.push({test: true}); request.reply(s);

Node.jsstream可读可以转换

我一直在尝试使用可读和变换stream来处理一个非常大的文件。 我似乎遇到的问题是,如果我没有在最后放置一个可写的stream,程序似乎在结果返回之前终止。 例如: rstream.pipe(split()).pipe(tstream) 我的tstream有一个发射器,当计数器达到阈值时发射。 当这个阈值被设置为一个较低的数字,我得到一个结果,但是当它很高时,它不会返回任何东西。 如果我把它传给一个文件编写器,它总是返回一个结果。 我错过了什么明显的? 码: // Dependencies var fs = require('fs'); var rstream = fs.createReadStream('file'); var wstream = fs.createWriteStream('output'); var split = require('split'); // used for separating stream by new line var QTransformStream = require('./transform'); var qtransformstream = new QTransformStream(); qtransformstream.on('completed', function(result) { console.log('Result: ' + result); }); exports.getQ = function […]

在Node.js中用fs.createReadStreamreplacefs.readFile

我有从目录中读取图像并将其发送到index.html的代码。 我想用fs.createReadStreamreplacefs.readFile,但我不知道如何实现这一点,因为我找不到一个很好的例子。 这是我得到(index.js) var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var fs = require('fs'); http.listen(3000, function () { console.log('listening on *:3000'); }); app.get('/', function (req, res) { res.sendFile(__dirname + '/public/views/index.html'); }); io.on('connection', function (socket) { fs.readFile(__dirname + '/public/images/image.png', function (err, buf){ socket.emit('image', { image: true, buffer: buf.toString('base64') }); }); }); […]

如何在不使用阻塞stdio的情况下将大数据从/传输到node.js中的subprocess?

我在node.js中有一些(子)进程需要传输大量的数据。 当我阅读说明书时说,它们之间的stdio和ipc接口是阻塞的,所以这是不行的。 我正在研究使用文件描述符,但我找不到一种方法从他们stream(请参阅我的其他更具体的问题如何stream/从节点中的文件描述符? ) 我想我可能会使用一个networking套接字,但我担心有不必要的开销。 我也看到这个,但它不一样(并没有答案: 如何在Node.js中以非阻塞的方式将大量的数据从subprocess发送到父进程? )