我有一个节点服务器向另一个节点服务器发出请求,该服务器返回我想要parsing的JSON,然后作为响应发送。 我意识到额外的parsing步骤是不必要的,但我想确保我正确理解stream的使用: http.get({host: config.host, path: "/data"}, function (response) { response.pipe(JSONStream.parse()).pipe(routeResponse); }); 但是这给了我: http.js:853 抛出新的TypeError('第一个参数必须是string或缓冲区'); 如果我只是做response.pipe(routeResponse)它确实工作。 再一次,我知道这是不必要的,但我想让它工作。 另外: 我将如何独立设置响应头(如有必要) 为什么我不能只做http.get().pipe(routeResponse) ?
我喜欢创build一个基于NodeJS的广播电台, 而不使用ShoutCast。 基于NodeJS的播放列表 目前我已经设法将一个audio文件传送到浏览器,但是我不知道如何创build一个服务器端播放列表 ,这个播放列表持续地“播放”当前歌曲,并在到达结束时重新启动它。 那是我目前的做法: 'use strict'; var http = require('http'); var fs = require('fs'); var mm = require('musicmetadata'); var ID3 = require('id3'); var express = require('express'); var app = express(); var stream; function startPlaylist() { stream = fs.createReadStream(__dirname + '/AnsolasChill_loop.mp3', { start: 0 }); //10130000 /* * Start serverside "Playback" here. * Restart […]
我正在创build一个Web服务器来pipe理对活动数据的订阅。 这些数据通过TCPstream式传输到nodejs,然后stream式传输到使用Socket.io通过websockets订阅特定主题的客户端。 这是工作stream程。 客户端发送特定主题的订阅请求。 Nodejs应用程序将代理这个订阅到Java应用程序,然后开始通过TCP将数据推送到nodejs。 Java应用程序为每个可以侦听的新闻types启动9个不同的套接字连接,每个套接字一个类别 值得一提的是,这个数据可能是非常巨大的,因为当客户端订阅他们第一次获得历史数据(高达45MB),并且每个后续的推送包含一个小的增量。 我所遇到的问题是在初始推送nodejs应用程序中使用了超过100%的CPU。 起初,我认为这个问题是parsing正在发送给我的数据。 经过几天的debugging,我发现当注释掉socket.emit(data.topic, data) CPU会下降到1%-3%。 这使我相信,我遇到的问题是与socket.io。 我在这里误用socket.io吗? 有什么替代scheme可以推动不同的主题/渠道? 我的代码有什么问题吗? 感谢您的时间! //needed for REST subscribe services var app = require('express')() //needed for HTTP server , server = require('http').createServer(app) //WebSocket library (TODO see how to implement this) //, sockjs = require('sockjs') //backend subscriptions , subUtil = require('./subscriptions/subscriptionManager') , bodyParser = […]
我想读一个.txt文件,将数据追加到最后,最后发送给zipstream。 现在我正在做的是写一个新的文件,然后使用新的文件的zipstream,但我想在飞行,而不创build一个不必要的新文件。 我的问题是如何创build一个读取stream,修改它并发送到另一个读取stream(可能与中间的写入stream)。 这可能吗? 原来的想法是这个,但我迷失在中间的某个地方: var zipstream = require('zipstream'); var Stream = require('stream'); var zipOut = fs.createWriteStream('file.zip'); var zip = zipstream.createZip({ level : 1 }); zip.pipe(zipOut); var rs = fs.createReadStream('file.txt'); var newRs = new Stream(); // << Here should be an in/out stream?? newRs.pipe = function(dest) { dest.write(rs.read()); dest.write("New text at the end"); }; zip.addEntry(newRs, […]
我正尝试使用websockets将大型video文件stream式传输到浏览器的<video>标签中。 video播放良好,但是在播放之前一直等待下载整个video,导致很大的延迟。 设置autoplay = true和preload="none"似乎对此没有影响。 所以我已经研究过把video分块,然后把它作为一个blob的URL发送到浏览器。 对于块,我正在使用节点分块stream 我的代码到目前为止: var chunkingStreams = require('chunking-streams'); var SizeChunker = chunkingStreams.Chunker; var input = fs.createReadStream('src-videos/redcliff450.webm'), chunker = new SizeChunker({ chunkSize: 2000000 }), output; chunker.on('chunkStart', function(id, done) { output = fs.createWriteStream('src-videos/output/' + id + '.webm'); done(); }); chunker.on('chunkEnd', function(id, done) { output.end(); done(); }); chunker.on('data', function(chunk) { output.write(chunk.data); }); input.pipe(chunker); //test […]
比方说,我们想要读入一个1GB的file upload到networking端点。 唯一的问题是,在进行networking上传请求之前,我们必须做出另一个networking请求来获得一个令牌,以允许上传通过。 所以,如果有人的代码看起来像… fs.createReadStream('1-gb-file').pipe(myWritableStream); …我应该担心数据缓冲在内存之前,我的writestream说已经准备好(获取令牌之后)? 我发现一个fs.createReadStream可读有64kb的highWaterMark 。 这是否意味着最大的缓冲区内限制是64kb,在更多的数据被吸出可读性之前? 在我调用this.emit('writable') (或者其他一些触发器)之后,数据是否会被读取 (超出highWaterMark)? 编辑:也许触发器只是调用_write收到的第一个电话的callback? 我很新的streamapi,所以帮助表示赞赏。 我search了类似的问题,并找不到任何。 悲伤的脸。 谢谢!
我有一个插件,使用此function在stream中生成新的文件 var pass = through2.obj(function (file, enc, callback) { if (!gulpmatch(file, __json_condition)) { this.push(file); }else { compiled_files = bootsie_compiler.build_from_buffer(file.contents, {stream:true}); for (var i =0; i<compiled_files.length; i++){ this.push(new gutil.File( { base: compiled_files[i].base, path: compiled_files[i].path, contents: new Buffer(compiled_files[i].contents) }) ); } } callback(); }); 一切正常,gulp-filelogs在stream中输出3个文件 [21:51:34] [1] [Path:/home/michael/Projects/OpenSource/Portfolio/www/build/index.html] [Base:/home/michael/Projects/OpenSource/Portfolio/www/build] [CWD:/home/michael/Projects/OpenSource/Portfolio/www] [21:51:34] [2] [Path:/home/michael/Projects/OpenSource/Portfolio/www/build/archive/test/index.html] [Base:/home/michael/Projects/OpenSource/Portfolio/www/build/archive/test] [CWD:/home/michael/Projects/OpenSource/Portfolio/www] [21:51:34] [3] […]
有没有一种简单的方法来跟踪Twitter列表中的“实时”鸣叫? 以下是一个示例列表: https : //twitter.com/StartupDorf/lists/startups-im-startupdorf 我想过使用twit ,并首先检索所有成员的列表,然后跟踪这些用户。 这是我目前的方法,分两步工作: // first, fetch a list of all list members T.get('lists/members', {id: 1282843634, list_id: 95809626, count: 5000}, function (err, data, response) { if (err) { // } else { data.users.forEach(function (user) { follow.push(user.id) }); } }); // I haven't seen a .done() method, so I'm just waiting 3 […]
我已经在Vagrant虚拟机中安装了Nodejs 。 我们称之为nodejs remote 。 我将从webstorm应用程序运行remote nodejs 。 我已经从该应用程序安装vagrant插件。 在设置中,我可能会设置节点解释器的path,但是因为它进入虚拟机,我怎么能达到它?
这是设置: [Proxy/Relay Server] <———[(SMTP TLS test client) Test server] ^ | (Internet) v ————–+—————– | [Router] | | [ Home email appliance machine | (Home email server app (Node.js)) | (Postfix) ] 所以这个小小的服务器就在家里的NAT后面。 使用外部服务器作为IMAP和SMTP的代理/中继。 家庭电子邮件设备应用程序连接到互联网上的代理/中继服务器。 家庭电子邮件设备应用程序连接到本地主机上的SMTP Postfix端口。 家庭电子邮件应用程序在两个连接之间创build一个双向pipe道。 从Internet上的testing服务器上,将支持TLS的SMTP客户端连接到代理/中继服务器。 代理/中继服务器在代理连接和来自家庭电子邮件设备的预先存在的连接之间传输数据。 SMTP客户端执行STARTTLS协议。 家庭电子邮件设备应用程序通过pipe道在代理/中继和本地主机SMTP之间传输数据,以通过TLS执行SMTP。 我们使用openssl s_client来testing到代理/中继服务器的TL连接,该服务器将数据来回发送到NAT后面的客户端。 它对于纯文本非常有效,但是我不确定它是否对TLS始终如一的工作。 偶尔我会从openssl s_client命令中得到一个完整的输出,带有SSL证书等等,但通常它只是说CONNECTED并且在那里。 不知道这是在这种情况下工作。 基本上它的这个代码运行在具有Postfix的计算机上的NAT(路由器)后面(有一些安全的东西,但基本上是这样): proxyOutgoing = net.connect(proxyport, proxyhost) localSMTP = […]