Tag: stream

节点Js与response.write的问题

当我尝试利用httpstream连接出于某种原因,直到我调用response.end()才写入, 我直接从演示代码,不明白我的问题是什么。 当我curl到服务器我的头是正确的。 HTTP/1.1 200 OK Content-Type: text/plain Connection: keep-alive Transfer-Encoding: chunked var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('hello'); res.write(':'); setTimeout(function(){ res.end('World\n')}, 2000); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 为什么服务器不发送写入数据?

meteor的持久会议

所以,我一直用meteor观察到的一个更令人困惑的方面是每次刷新都会清除会话。 既然它不是一个持久的商店,那么我会在哪里放置像userid这样的东西,或者我的应用程序的状态机中的用户? 这些场景的模式是什么?

Node.jsstream如何工作?

我有一个关于Node.jsstream的问题 – 特别是他们如何在概念上工作。 不乏关于如何使用stream的文档。 但是我很难在数据层面find数据stream的工作原理。 我对Web通信(HTTP)的理解有限,就是数据的完整“包”被反复发送。 与订购公司目录的个人相似,客户端向服务器发送GET(目录)请求,服务器响应该目录。 浏览器没有收到目录的页面,而是整本书。 节点stream可能是多部分消息? 我喜欢REST模式 – 特别是它是无状态的。 浏览器和服务器之间的每一次交互都是完全独立和充分的。 节点stream是不是RESTful? 一位开发人员提到了与套接字pipe道的相似性,这使得连接保持开放。 回到我的目录订购的例子,这是否会像电视广告的“等等,还有更多! 而不是完整的目录? 大部分数据stream是接收方“下游”发送消息的能力,如上游的“暂停”和“继续”。 这些消息由什么组成? 他们是POST吗? 最后,我对Node工作方式的有限理解包括这个事件循环。 函数可以放置在线程池的不同线程中,并且事件循环继续。 但是,不应该发送数据stream保持事件循环占用(即停止),直到stream完成? 请问如何继续监视来自下游的“暂停”请求?事件循环是否将该stream放置在池中的另一个线程上,当遇到“暂停”请求时,检索相关线程并暂停它? 我已经阅读了node.js文档,完成了nodechool教程,构build了一个heroku应用程序,购买了两本书(真实的,自包含的,书籍,有点像以前说过的目录,可能不像节点stream),问几个“节点”教练在代码bootcamps – 都讲述如何使用stream,但没有人谈论下面实际发生的事情。 也许你遇到了一个很好的资源解释这些工作? 也许对于一个非CS的头脑来说,一个好的拟人化的比喻?

什么是在“完成所有事情”之后退出node.js脚本的好方法

我的node.js脚本从数据库1的表中读取行,进行一些处理并将行写入数据库2。 一切完成后脚本应该退出。 我怎么知道一切是否完成,然后退出节点? 如果我有这样的callback函数: function exit_node() { process.exit(); } (编辑:同时显而易见,process.exit()也可以用db.close()来代替 – 但这不是什么问题。问题是在什么时候完成这个工作,即如何以及在哪里执行这个callback。) 但是把它附在某个地方并不容易。 从db1上次读取后不正确,因为处理和写入还是要发生。 将它附加到写入db2并不容易,因为它必须在最后一次写入之后进行连接,但每次写入都是独立的,不知道它是否是最后一次写入。 理论上也可能发生最后一次写入完成,但在此之前的另一次写入仍在执行。 编辑:对不起,我可以看到这个问题的解释不完整,可能令人困惑,但有些人仍然理解,下面有很好的答案。 请继续阅读评论和答案,它应该给你全部的图片。 编辑:我可以想到一些“阻塞”控制器机制。 脚本的不同部分为每个打开的“作业”向控制器添加阻止程序,并在作业完成后释放它们,并且当没有更多的作业者时,控制器退出脚本。 也许asynchronous可以帮助: https : //github.com/caolan/async 我也担心这会炸毁代码和逻辑不合理。

Node.js在服务器和客户端之间同步audiostream?

我正在尝试构build一个Web应用程序,它将在浏览器中传输audio (不带任何插件),并允许其他用户joinwww.mysite.com,audio将同时传输到每个连接的用户当前主机的audio位置(即服务器和客户端之间同步的audio播放)。 我需要做些什么来实现类似的东西? 我正在研究一个Node.js / Express项目,但是我没有碰到Stream或Buffer API。 那是我需要使用的吗? 另外WebRTC呢? 这适用于这里吗?

NodeJS:如何为testing服务器创build一个虚假的tcp套接字

我试图unit testing我的服务器代码(非HTTP,自定义协议)。 我需要创build一个模拟双工套接字,我可以asynchronous地发送消息并接收消息。 我从事件streamreadArray和writeArray创build了一个双工stream,但是readArray需要提前写入数据,writeArray不会触发,直到stream结束。 我需要testing一段时间。 一个理想的解决scheme是将两个双工sockets连接在一起。 有没有现有的解决scheme呢? 我宁愿不必诉诸初始化一个实际的服务器来testing这个。

在nodejs中stream式传输video

我试图从我的服务器streamvideo,但它不起作用,或者我可能做错了: 我的路线定义如下: var fs = require('fs'); router.get('/', function(req, res) { fs.readdir(__dirname + '/../public/videos', function(err, data){ res.render('videos', {files: data}); }); }); router.get('/:file', function(req, res) { res.render('videofile', {file: req.params.file}); }); 在我的模板文件中我有video.jade: ul for file in files li p a(href=file)= file 其实它列出了我的video剧目中的所有video。 然后为videofile.jade video source(src=file type="video/webm") 我希望它能在我的iOS设备上工作,但不会(它保持在同一页面上)

如何处理Node.jsencryptionstream中的块长度

我想encryption一个inputstream,并通过TCP发送给另一台服务器。 到现在为止还挺好。 一切运行顺利,直到连接closures。 几乎在任何情况下,192位所需的块大小都不符合,脚本崩溃的wrong final block length ,尽pipe我打开了自动填充。 看起来像自动填充只有在使用传统界面时才起作用。 我在这里做错了什么? var net = require("net") , crypto = require("crypto"); var credentials = { algorithm: "aes192", password: "password" } , decipher = crypto.createDecipher(credentials.algorithm, credentials.password) , cipher = crypto.createCipher(credentials.algorithm, credentials.password); decipher.setAutoPadding(true); cipher.setAutoPadding(true); net.createServer(function(socket) { socket.pipe(socket); }).listen(2000); var socket = net.connect(2000); socket.pipe(decipher).pipe(process.stdout); process.stdin.pipe(cipher).pipe(socket); socket.write("Too short."); socket.end(); 在我理想的Node.js世界中,当源streamclosures时,(De-)密码stream将自动填充最后一个块。 我认为这是一个devise缺陷。 除了解决问题之外 […]

Node.JS TCP上的无界并发/stream反压

据我了解,Node的IO模型的后果之一是无法告诉Node进程(例如)通过TCP套接字接收数据,阻塞,一旦你连接你的接收事件处理程序(或否则开始监听数据)。 如果接收者无法足够快地处理传入的数据,那么可能会导致“无限并发”,从而节点底层继续尽可能快地从套接字读取数据,在事件循环中调度新的数据事件,而不是阻塞在套接字上,直到进程最终耗尽内存并死亡。 接收者不能告诉节点减慢读取速度,否则TCP将会允许TCP内置的stream量控制机制启动,并向发送者表明需要减慢速度。 首先,我所描述的到目前为止是准确的? 有什么我错过了,允许节点避免这种情况? 节点stream的特点之一是自动处理背压。 AFAIK,一个可写的stream(的tcp套接字)可以判断是否需要减慢的唯一方法是通过查看socket.bufferSize (表示写入套接字,但尚未发送的数据量)。 鉴于接收端的节点总是以尽可能快的速度读取,这只能指示发送者和接收者之间的networking连接速度较慢,而不能说明接收者是否跟不上。 那么其次,Node Streams自动背压能以某种方式在这种情况下工作来处理一个跟不上的接收器? 也似乎这个问题影响了浏览器通过websocket接收数据,原因类似于websockets API没有提供一种机制来告诉浏览器从套接字读取的速度。 是唯一的解决这个问题的节点(和浏览器使用websockets)在应用程序级别实现手动stream量控制机制,明确地告诉发送进程减慢?

pipe(Node.jsstream)和bl(BufferList)如何一起工作?

这实际上是Node.js教程([ https://github.com/workshopper/learnyounode][1] )的第8号练习。 目标:编写一个执行HTTP GET请求的程序作为第一个命令行参数提供给您的URL。 从服务器收集所有数据(不只是第一个“数据”事件),然后写两行到控制台(标准输出)。 你写的第一行应该是一个整数,表示从服务器接收的字符数。 第二行应包含服务器发送的完整string。 所以这是我的解决scheme (它通过,但看起来比官方的解决scheme丑)。 var http = require('http'), bl = require('bl'); var myBL = new bl(function(err, myBL){ console.log(myBL.length); console.log(myBL.toString()); }); var url = process.argv[2]; http.get(url, function(res){ res.pipe(myBL); res.on('end', function(){ myBL.end(); }); }); 官方解决scheme: var http = require('http') var bl = require('bl') http.get(process.argv[2], function (response) { response.pipe(bl(function (err, data) { […]