Tag: 非阻塞

事件循环与Node.js主要在同一个线程中?

所以Node.js使用事件循环来实现非阻塞IO。 我想知道如果事件循环与Node.js主要处理请求是在同一个线程?

非阻塞Node.js ClientRequest.write()

根据http.js ,node的http模块的ClientRequest.write(chunk,encoding)方法是阻塞的:控制stream暂停,直到所有的数据(当前的一个和所有的缓冲数据)被发送。 我想同时使用几个并行连接发送更大量的数据。 是否有任何(直接)创build方法的非阻塞版本的方法,就像ClientRequest.write(chunk,encoding,callback)在“后台”发送数据,并在callback处理程序(或事件)被触发时发送已完成? 提前致谢!

非阻塞的MongoDB + NodeJS

我正在尝试在NodeJS环境中的MongoDB集合中find文档。 有什么办法可以做到以下几点? 这不工作: var foo = function (id) { // find document var document = database.find(id); // do whatever with the document … } 这样就创build了一个块: var foo = function (id) { // find document var document = database.find(id); while (!database.find.done) { //wait } // do whatever with the document … } 我想做的事 : var foo […]

在node.js应用程序中完成并行http获取请求

我想要并行执行一些HTTP请求,映射到结果上,然后在所有结果都准备好的情况下重新同步(join),以便呈现结果页面。 伪代码: var value_needed_to_render_page = async.parallel([array of values to iterate over], function to call in parralel on array).join() return page_render(value_needed_to_render_page); 我一直在寻找asynchronous和FutureJS,但没有find一个好方法。

Node.js中的asynchronous代码和循环?

我已经在asynchronous编程方面做了好几个小时的研究,但我似乎无法在Node中掌握这个单一的概念,所以我想知道这里有人能帮助我。 我已经写了下面的代码示例来返回/输出一个简单的string,这是一个对象string的串联: var itemCollection = { item1 : [{ foo : "bar" }, { foo : "bar" }, { foo : "bar" }], item2 : [{ foo : "bar" }, { foo : "bar" }, { foo : "bar" }], item3 : [{ foo : "bar" }, { foo : "bar" }, { foo : […]

如何使一些同步代码在其他asynchronous代码之前运行?

我有这样的function: var download = function(url, name) { http.get(url, function(response) { // part1 : create a new folder if it doesn't exist dir = './name'; if (!fs.existsSync(dir)){ fs.mkdirSync(dir); } // part 2: download and save file into that folder response.on('data', function (data) { fs.appendFileSync(dir, data); }); }) } 我希望第1部分在第2部分运行之前完成(这样我可以为第2部分指定目录)。 我怎样才能做到这一点 ? (在上面的代码中,就我所知(到目前为止,我是node.js的新手),两个部分将同时运行,所以我不确定部分1会在部分2运行之前总是完成)。

了解Node中的非阻塞IO

这些代码有什么区别? ***第一* var express = require('express'); var app = express(); app.post('/', function (req, res) { console.log('Procesando abastecimiento…'); var rawData = ''; req.on('data', function (chunk) { rawData += chunk; }); req.on('end', function(){ console.log('Data recibida: ' + rawData); res.end(); }); }); 第二 var express = require('express'); var app = express(); app.post('/', function (req, res) { console.log('Procesando abastecimiento…'); […]

非阻塞在Node.js循环和池?

我开始玩node.js,我有一个应用程序,它基本上遍历了几十个对象,并为它们执行一些各种asynchronoushttp请求,并使用从http请求返回的各种数据填充对象。问题更多地涉及Node.js的最佳实践,非阻塞操作,可能与池化有关。 原谅我如果我使用了错误的术语,因为我是新手,请不要犹豫,纠正我。 所以下面是一个简单的总结,我有一个循环的代码循环数千 //Loop briefly summarized for (var i = 0; i < arrayOfObjects.length; i++) { do_something(arrayOfObjects[i], function (error, result){ if(err){ //various log }else{ console.log(result); } }); } //dosomething briefly summarized function do_something (Object, callback){ http.request(url1, function(err, result){ if(!err){ insert_in_db(result.value1, function (error,result){ //Another http request with asynchronous }); }else{ //various logging error } }); http.request(url2, […]

当我使用node.js时,我应该使用循环asynchronous方式吗?

我用express来testingnode.js。 从理论上讲,如果我在没有任何callback的情况下对“for循环”执行一些非常繁重的计算, 它被阻塞,其他请求应该被忽略。 但就我而言,定期的“for循环” for(var i=0;i<300000;i++) { console.log( i ); } 不做任何请求块,但只是高CPU负载。 它也接受其他请求。 但为什么我应该使用其他一些方法来使这些非阻塞如 process.nextTick() 或者,node.js是否使用process.nextTick()作为默认函数来处理基本循环函数(for,while)?

什么是通过HTTP POST处理大量数据的有效方法?

我正在编写一个应用程序,将用于绘制和分析海量的日志数据。 基本上,我们的应用程序(网站,Tomcat,控制台等)将有自定义的log4j appender发送日志条目到我们的远程服务器。 现在我想通过普通的HTTP POST来接受这些日志条目。 在这一点上,Web服务将logging到数据库中。 我在Node.js和Akka之间的栅栏上。 主要是因为我有Java和JavaScript的经验。 但是我对Akka的演员模式是新的,我读过Node并不是真正的并行,除非你运行多个节点服务器? 我的逻辑是这样的: 1)应用程序POST日志条目到服务器 2)服务器采取HTTP请求,并创build一个Amazon SQS条目(或Azure服务总线…没有决定) 3)工作人员清理队列并将条目存储在数据库中。 我认为这将允许真正快速的input,但调用SQS操作将是一个长期的IO过程。 我的另一个想法是接受POST请求,将其存储在memcached或Redis中,然后让工作人员从caching中拉出,发送到SQS,然后清除队列中的数据库插入。 这将具有HTTP请求尽可能快地传递数据的优点,并让其他工作人员处理logging。 这听起来像Akka的工作,因为我可以不分配每个请求的演员,然后让它产生其他演员来处理它进/出caching? 在testing阶段,我一次可以轻松看到20-500个请求。 取决于我们在testing中打开多less个应用程序。 但是一旦完全运行,我们可以看到来自所有应用程序的每秒数千个请求。 所以我的问题是如何最好地处理我将得到的海量数据。 我关心线程locking,http阻塞等