Articles of 阻止

非阻塞的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 […]

如何cpu密集是太多的node.js(担心阻塞事件循环)

我正在与各个社区编写一个节点应用程序,在这些社区中,用户可以创build和join房间/大厅。 我已经将这些大厅的逻辑写入了节点应用程序本身,但通过大厅对象的集合。 大堂一旦创build,需要一些维护。 用户可以改变大厅内的各种状态,而且我还可以定期(大约每2秒)使用socket.io调用每个大厅,以跟踪一些用户input的“实时”。 这些任务都不是太密集的CPU。 我预见到的最大的潜在威胁是负载分配algorithm,但它不是“实时呼叫”之一,仅在大厅创build者按下button时激活(它也不会在超过10件事情上执行)。 我担心的是,在生产中,如果服务器也开始接近100-200大厅,我可能冒着阻塞事件循环的风险。 我的担心是否合理? 这些操作的潜在数量,尽pipe它们很小,足够大,以将代码卸载到单独的可执行文件中,或者涉及各种frank-thread的JavaScript库吗? TL; DR:节点应用程序具有运行常规小任务的对象。 我应该担心事件循环阻塞,如果这些对象很多。

使用API​​调用阻塞nodejs

我不确定这是否是正确的方法,但我期待在for循环中创build10个API请求,并且我希望每个API请求都被阻止。 也就是说,要等到我收到响应而没有callback,然后再次遍历foor循环。 这是foor循环 for (var i=0; i< out.items.length; i++) { var object = makediffbotAPIcall(out.items[i]); console.log(object); } 请求function如下 function makediffbotAPIcall(item, array) { var url_to_send_diffbot = "string of url here"; request(url_to_send_diffbot, function (error, response, body) { if (!error && response.statusCode == 200) { var article_object = JSON.parse(body) var object = {"Title": article_object.title, "Url":article_object.url}; } }); return object; […]

在node.js和erlang vm中调用一个阻塞库

在node.js中,如果我的线程调用了一个阻塞库,它将不能接受任何更多的请求,直到它从库中取回响应。 这与Erlang虚拟机的情况是否一样 – 也就是说,如果其中一个进程调用阻塞库,其他进程是否可以继续接受请求?

如何通过mongoose非阻塞获取大数据?

我如何通过mongoose获得大量的收集,我得到的每一个文件返回,而不是整个集合的巨大数组? 目前我只使用以下查询: var query = templateData.find({}); query.exec(function (err, docs) { // docs as array }); 这样,查询function就像阻塞IO而不是非阻塞。 有没有办法让这个更无阻塞?

从Jenkins开始nodejsasynchronous

我目前正在使用node.js服务器实现一些模拟http主机。 这个服务器应该由jenkins CI工作启动。 在JMeter开始集成testing之后,应该closuresnode.js服务器。 现在我有问题,我可以没有问题启动node.js服务器以及单独的Jmetertesting文件。 问题是,node.js执行阻塞了Jenkins Job,因此在Node实际从未启动的时候启动的JMetertesting。 因此,我想知道是否有办法在后台启动node.js服务器,让它听,直到JMetertesting结束,然后再closures它。 我猜可以使用对nodejs服务器的一些特殊请求来实现closures,但主要的问题是启动nodejs http服务器会阻塞整个jenkins进程,因此JMetertesting从不会启动。 有没有办法告诉jenkins它应该启动nodejs服务器,但不应该等待它结束? 在此先感谢Cromon

是http.ServerResponse.write()阻塞?

有没有可能写非阻塞response.write? 我已经写了一个简单的testing,看看其他客户端可以连接,而一个下载文件: var connect = require('connect'); var longString = 'a'; for (var i = 0; i < 29; i++) { // 512 MiB longString += longString; } console.log(longString.length) function download(request, response) { response.setHeader("Content-Length", longString.length); response.setHeader("Content-Type", "application/force-download"); response.setHeader("Content-Disposition", 'attachment; filename="file"'); response.write(longString); response.end(); } var app = connect().use(download); connect.createServer(app).listen(80); 这似乎是write封锁! 难道我做错了什么? 更新所以,它不会阻塞,并在同一时间阻止。 这并不意味着可以同时下载两个文件。 而且它阻止了创build缓冲区是一个漫长的操作。

如何在Node JS中编写一个非阻塞的if语句?

我有一个if语句在PHP中: if ( $isTrue && db_record_exists($id)) { … } else { … }; 第一个条件是true / false布尔检查。 第二个条件调用函数来查看数据库表中是否存在行,并返回true或false。 我想在Node JS中重写这个条件,所以它是非阻塞的。 我已经重写db_record_exists如下… function db_record_exists(id, callback) { db.do( "SELECT 1", function(result) { if (result) { callback(true); } else { callback(false); } ); } …但是我看不到如何用布尔检查把它们合并到一个更大的if语句中。 例如,下面的说法没有意义: if (isTrue and db_record_exists(id, callback)) { … } 什么是“节点”的方式来写这个? 任何意见将不胜感激。 在此先感谢您的帮助。

非阻塞(事件驱动的I / O)与阻塞I / O

最近我偶然发现了一个名为nodeJS的漂亮的JS库,它就像服务器端的JS一样。 语言的主要特点是使用I / O,它使I / O的固有容量完全无阻塞使用callback! 我的问题是,如果这种完全不阻塞的I / O机制过去存在(给定事件驱动的I / O已经存在很长时间了),为什么它们在C#和高级语言Java(尽pipeJava有支持非阻塞I / O的NIO实现)? 目前,简单的文件读/写操作导致完全的I / O阻塞,事件驱动的I / O不是这种情况。 我想更好地理解事件驱动的I / O,以及它与我们在Java中的不同之处。

如果nodejs使用非阻塞IO,fs.readFileSync如何实现?

我在文件系统库中看到很多同步function。 如fs.readFileSync(filename, [options]) 。 如果节点具有asynchronous/非阻塞IO并且没有睡眠方法,那么这些函数是如何(以及为什么)实现的?我可以使用相同的机制来实现其他同步函数吗?