Tag: stream

缓冲区通常比stream更快处理?

我已经尝试了几个Imagemagick包装库和一些S3库。 由于巨大的性能差异,我无法select最佳的概念。 我已经与节点库“gm”解决了,这是一个很好的工作和logging。 至于S3我已经尝试了亚马逊自己的AWS库以及“S3-Streams” 编辑:我刚刚发现,AWS库可以处理stream。 我想这是一个新的functions3.upload(或者我刚刚错过了?)。 无论如何,我放弃了使用s3uploadPart更复杂的S3stream 。 在我的testing案例中切换库stream后等于上传缓冲区。 我的testing用例是将一个2MB的jpg文件分割成大约30个512px的tile,并把每个tile发送到S3。 Imagemagick通过裁剪命令有一个非常快速的自动生成方块。 不幸的是,我还没有find任何节点库,可以捕获自动生成的瓷砖的多文件输出。 相反,我必须通过分别为每个图块调用crop命令来在循环中生成图块。 我会提供详细信息之前的总计时间: A :85秒(s3-streams) A :34秒(aws.s3.upload)(编辑) B :35秒(缓冲器) C :25秒(缓冲区并行) 在这种情况下,明显缓冲区比stream处理更快。 我不知道gm或s3stream是否有不好的stream的实现,或者我应该调整一些东西。 现在我要解决schemeB. C更快,但吃更多的内存。 我在低端数字海洋Ubuntu机器上运行这个。 这是我曾经试过的: A.生成瓦片并逐一stream式传输 我有一个数组准备与裁剪信息和s3Key为每个瓷砖生成 该数组与“async.eachLimit(1)”循环。 我没有成功地一次生成多个瓦片,因此限制(1)。 随着瓦片生成,它们直接stream入S3 伪代码: async.eachLimit(tiles, 1, function(tile, callback) { gm(originalFileBuffer) .crop(tile.width, tile.height, tile.x, tile.y) .stream() .pipe(s3Stream({Key: tile.key, Bucket: tile.bucket})) //using "s3-streams" package .on('finish', callback) }); […]

meteor中的stream量路由器子导航

我有一个布局 <template name="default"> {{> header}} <aside class="container"> {{> Template.dynamic template=yield}} </aside> </template> 我使用stream量路由器导航到设置: FlowRouter.route( '/settings', { name: 'settings', action: function ( params, queryParams ) { BlazeLayout.render( 'default', { yield: 'settings' } ); }, } ); 但我的设置页面由多个设置页面组成,所以我需要在设置页面上的菜单,以便用户可以导航到其他设置页面(即更改密码,更改名称等)。 我将不得不为每个设置页面设​​置路线,但是如何在设置页面之间保留一个侧栏来导航? 路线是 /设置 /设置/更改密码 /设置/删除用户 等等 我认为用户应该能够在路线/settings的“主要/基本设置页面”上更改他/她的名字。 我想我可以做另一个有侧边栏的布局页面,所以我可以设置路线 FlowRouter.route( '/settings', { name: 'settings', action: function ( params, queryParams ) […]

在npm安装上发生EEXIST错误

我运行与Vagrantshell的NPM安装,我得到这个错误。 我已经尝试删除/home/vagrant/.npm目录和npm cache clear但我仍然得到错误。 谢谢! npm ERR! EEXIST, open '/home/vagrant/.npm/8fdf262d-rant-npm-json5-0-4-0-package-tgz.lock' File exists: /home/vagrant/.npm/8fdf262d-rant-npm-json5-0-4-0-package-tgz.lock Move it away, and try again. npm ERR! System Linux 3.13.0-62-generic npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" npm ERR! cwd /working-directory npm ERR! node -v v0.10.40 npm ERR! npm -v 1.4.28 npm ERR! path /home/vagrant/.npm/8fdf262d-rant-npm-json5-0-4-0-package-tgz.lock npm ERR! code EEXIST npm ERR! errno […]

从http获取到http发布stream文件

我有2个服务器,我想从一个GET请求获得一个文件,并通过POST请求发送到另一个服务器。 最简单的解决scheme是从第一台服务器存储文件,然后(一旦下载完成)发送到另一台。 但是,不是两次做,而是一次性做。 我尝试直接从get到post的数据stream。 我有以下代码: var stream = function(getOptions, postOptions, dest, cb) { var fileRead = fs.createWriteStream(dest); var getRequest = https .request(getOptions, function(response) { response.pipe(fileRead); fileRead.on('finish', function() { fileRead.close(cb); }); }) // .on('error', function(err) { // fs.unlink(dest); // }) .end(); var fileWrite = fs.createReadStream(dest).pipe(https.request(postOptions).end()); } 该文件得到正确,但我不知道如何将数据直接发送到第二台服务器。 我试过上面的代码,它不工作(dest在不是一个函数)。 参考文献: 在Node.js中通过HTTP发送大型图像数据 谢谢!

如何重新设置标准input后,我已经把它的标准输出?

你好,首先这个问题! 无论如何,我正在写一个小实验来帮助更好地把握stream和更复杂的结合stream和承诺的组合。 但是,我遇到了一个我目前无法解决的问题。 如果你运行我的下面的脚本,然后inputinput,然后按ctrl-d结束input:节点将尝试从标准input读取所需的,但因为标准input结束,立即closures。 那么有没有更好的方法来写这个? 或者有没有办法重置标准inputstream再次input? 还是有更好的方法来停止要求input等待结束事件来解决我的承诺? 同样值得注意的是:在Node 5.1.0上运行,使用ES2015(通过Babel 6) import { Transform, Writable } from 'stream'; import util from 'util'; /** * Generic Transform * A test class to expiriment with creating a series of transforms * * @class * @extends {stream.Transform} */ class GenericTransform extends Transform { constructor (transformCallback, options={}) { super(Object.assign({}, options, […]

是否有可能结束节点stream块在某个字符?

我有一个相当大的XML文件,我stream到一个函数,就像这样: var stream = fs.createReadStream(__dirname + '/File.xml').pipe(myfunction); stream式传输function的内容并不重要,除了涉及将stream分割为所需的string并在其上运行decodeURIComponent 。 我遇到的问题是,一些块通过编码的string中途结束: 01 %E5%8A%87%E4%BC%B4%E7%89%%9E%8B1%E2%98%86%E6%A5%B5%E2%98%85%E6.csv 02 %E3%83%AA%E3%82%B9%E3%82%BC%B7%E5%8C%96%E5%9E%8B2%E2%98%86%E6.csv 03 %E6%97%A5%E5%8B3%E2%98%86%E6%A5%B5%E2%98%85%E6%9C%8D.csv 04 %E6%9C%8D%E7%9D%B1%9A%E5%9E%8B4%E2%98%86%E6%A5%B5%E2%98%85%E6%9C%8D.csv 05 %E5%90%8D%E4%BB%98%E6%89%87%E5% 正如你所看到的,最终的文件名是通过一个编码字符中途截断的。 是否有可能迫使stream块结束在某些字符或正则expression式组,例如。 .csv ? 我还没有在其他地方find解决办法,这使我相信我采取了错误的做法。 另一方面,我可以简单地将每个缓冲区的输出写入一个hugeString ,然后对其进行操作,但是我觉得这跟Node的stream所提供的其他好处并不hugeString 。

增加nodejspipe道的最大字节大小

我试图写一个小指挥脚本代理我的项目中的其他脚本,我试图使用节点来从生成的过程pipe道标准输出到当前进程的标准输出: function runCommand(command, arguments) { var commandProcess = childProcess.spawn(command, arguments); commandProcess.stdout.pipe(process.stdout); commandProcess.on("exit", process.exit); } 这工作正常,直到我开始从我的subprocess得到大的输出(例如,其中之一是maven命令)。 我所看到的只是输出stdout的前8192个字节,然后将其余的存储到下一个“数据”事件。 然后打印出下一个8192等等。这意味着输出存在滞后,有时在运行服务器进程的时候,有时会停止打印出来,直到触发服务器上触发另一个“数据”事件的事件。 有没有办法增加这个缓冲区的大小或避免这种行为? 理想情况下,这个指挥官脚本只是代理我们的其他脚本,应该打印出来的东西。

节点streamread()函数为什么会返回null的原因?

我正在构build一个节点应用程序,它从文件系统读取CSV文件,分析文件,然后使用csv-parse模块parsing文件。 这些步骤中的每一步都是以stream的forms传送到下一个。 我遇到的麻烦是,对于一些文件,parsing步骤可以读取stream,但对于其他人来说, read()方法在readable事件上返回null ,我不知道为什么。 在下面的代码中,具体来说,我有时会看到数据通过调用parsing器stream上的read() ,而其他时间将返回null 。 成功的CSV文件总是成功的,失败的CSV文件总是失败。 我试图确定文件之间的一些区别,但除了在第一行中使用不同的字段名称,以及在正文中略有不同的数据之外,我看不到源文件之间的任何显着差异。 什么是节点stream的read()函数在readable事件之后可能返回null一些原因? 示例代码: var parse = require('csv-parse'); var fs = require('fs'); var stream = require('stream'); var byteCounter = new stream.Transform({objectMode : true}); byteCounter.setEncoding('utf8'); var totalBytes = 0; // count the bytes we have read byteCounter._transform = function (chunk, encoding, done) { var data = chunk.toString(); if […]

节点:按顺序产生进程,inheritancestdio

我想在节点中顺序启动一系列的cli进程。 我想开始第一个过程,等待它退出,然后开始第二个过程,依此类推。 这些进程是cli程序,所以它们必须inheritancestdio,以便用户可以与每个进行交互。 我在这里的代码产生了第一个进程,但是当它退出(我假设是因为它inheritance了stdio)父进程也退出。 我已经写了它与发电机,但我打开使用任何控制stream库来完成任务。 我试图使用npm包Q,但我无法弄清楚。 var cp = require('child_process'); var co = require('co'); var list = ['item', 'item2']; co(function* spawnTflix () { for (var i=0; i < list.length; i++) { var x = yield sp('program', ['-o', '–search='+list[i]]); } }); function sp (command, args) { return function (fn) { cp.spawn(command, args, { stdio: 'pipe' }); […]

如何在快递4上发送承诺的收益作为stream?

我有什么办法可以把承诺作为一种传承的结果吗? 在某些情况下,JSON有效负载将是巨大的,将它作为一个stream发送是有道理的。 function aPromise() { // result of a postgres query. Using `pg` return Promise.resolve([ {key1: val1, key2: val2 } ]); }); } //express 4 router let wrap = require('co-express'); router.get('/', wrap(function* (req, res, next) { let payload; try { payload = yield aPromise(); } catch (e) { return next(e); } res.json(payload); }));