Tag: 非阻塞

文件收集和聚合结果报告的操作与非阻塞IO

我想对任意大的文件进行一些任意的昂贵的工作。 我想实时报告进度,然后在所有文件处理完毕后显示结果。 如果没有与我的expression式匹配的文件,我想抛出一个错误。 想象一下,编写一个testing框架,加载所有testing文件,执行它们(不按特定顺序),实时报告进度,然后在所有testing完成后显示聚合结果。 用阻塞语言(比如Ruby)编写这个代码非常简单。 事实certificate,在节点中执行这个看似简单的任务时遇到了问题,同时也真正利用了基于事件的asynchronousIO。 我的第一个devise是连续执行每一步。 加载所有的文件,创build一个文件集合进行处理 处理集合中的每个文件 在处理完所有文件后报告结果 这种方法确实有效,但对我来说看起来并不完全正确,因为它导致我的程序中计算量更大的部分等待所有的文件IO完成。 Node是不是被devise来避免的那种等待? 我的第二个devise是处理每个文件,因为它是在磁盘上asynchronous发现的。 为了争辩,让我们设想一下这样的方法: eachFileMatching(path, expression, callback) { // recursively, asynchronously traverse the file system, // calling callback every time a file name matches expression. } 而这种方法的消费者看起来像这样: eachFileMatching('test/', /_test.js/, function(err, testFile) { // read and process the content of testFile }); 虽然这个devise感觉像是一个非常“节点”的IO工作方式,它有两个主要问题(至less在我大概是错误的实现): 我不知道什么时候所有的文件都被处理了,所以我不知道什么时候汇编和发布结果。 由于文件读取是非阻塞的,recursion的,我正在努力如何知道是否没有find文件。 我希望我只是在做一些错误的事情,并且有一些合理简单的策略,其他人用第二种方法工作。 […]

嵌套请求被阻塞

我对nodejs比较新。 我最近把过去几个月收集的所有集体知识汇集到一个项目中。 我相信我已经在nodejs中遇到了我的第一个“阻塞”问题。 我有一个页面加载两个request()调用,他们是asynchronous和相应嵌套。 最内层的使用来自最内层的数据来redirect用户。 request(parameters,function(error, response, data){ //the first request passes a token request(newParamters,function(error, response, data){ //the second request passes a url res.redirect(data.info.url); }); }); 错误的是,当我在许多浏览器选项卡中打开它时,它会在第一对夫妇之后结束,然后服务器说data.info.url是未定义的。 我的问题是: 我是否应该一次只提出一项要求? 我可以保存令牌从第一个request()和redirect用户到第二个request()这将有助于? 我一直非常良心的asynchronous,而不是阻塞,我感到震惊,这是发生。 任何反馈将是伟大的!

比较和比较Node.js和Servlets 3.1非阻塞IO

Node.js使用Javascript的非阻塞性质。 另一方面,Servlets 3.1在Java EE 7中引入了非阻塞IO。 请解释这两者之间的技术上的相似点和差异,就非阻塞和可扩展性而言。

监视阻止调用nodejs

我试图连接到第三方库,它有一个function,可以阻止。 我想用它,但没有阻塞。 是否有可能包装一个我没有控制的阻塞调用,使其asynchronous? // calling this function will block the nodejs thread blockingCall(); 我想是这样的。 // wrapper for the blocking call var wrapper = wrapBlockingCall(blockingCall); wrapper.on('complete', function() {}); 这可能吗? 这有道理吗?

如何在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)) { … } 什么是“节点”的方式来写这个? 任何意见将不胜感激。 在此先感谢您的帮助。

meteor计算很长

我了解到,在Node.js中,您可以在长时间的计算之间进行操作,以防止服务器被阻塞。 你怎么在meteor上做到这一点? 在客户端也有这样的技术吗? 我是新来的网页开发,简单的例子将不胜感激。

pyzmq无阻塞套接字

有人可以指点我一个REQ / REP的非阻塞ZeroMQ(0MQ)与Python绑定的例子吗? 也许我对ZMQ的理解是错误的,但我在网上找不到一个例子。 Node.JS中有一台服务器,它将多个客户端的工作发送到服务器。 这个想法是,服务器可以启动一堆并行操作的作业,而不是为一个客户端处理数据,然后再处理下一个

如何在Node.JS中编写一个asynchronouswhile循环

我正在编写一个node.js应用程序来帮助自动化我的一些家酿酒厂。 我正在使用的一个模块是一个PIDalgorithm来控制输出,使它们保持一定的设定值。 我目前正在通过一个while循环,但是我认为这个代码将被阻止。 任何帮助使这个更有效和asynchronous将不胜感激。 这是我的控制循环: device.prototype.pid_on = function(){ while(this.isOn){ this.pid.set_target(this.target); // make sure that the setpoint is current var output_power = this.pid.update(this.current_value); // gets the new output from the PID this.output.set_power(output_power); }; }; 为了便于阅读,我稍微改了一下,但基本上就是这样。 它只会循环,调整输出,然后反馈新的input值。 我希望循环继续运行,直到设备closures。 显然,我需要这个非阻塞,这样我可以继续控制其他设备,而PID正在运行。 目前,我只是调用相当于device.pid_on(); 在我的代码。 我有一个想法是使用一个空的callback,这将使这个非阻塞? device.prototype.pid_on(calback){ while (this.isOn){…}; callback(); }; //call later in code device.pid_on(function(){}); 感谢任何/所有的帮助!

Ruby非阻塞库vs Node

我正在评估Ruby EventMachine(以及类似的非阻塞框架,比如Cramp)和Node.js. 我之前和Node一起工作过,但从来没有和EventMachine合作过。 Ryan Dahl鼓励的观点之一是,JavaScript中的图书馆生态系统必须是类似的非阻塞的,以促进这一点。 这是为什么Node是从零开始开发的一部分。 我的问题是,你可以在没有阻塞的情况下使用Ruby吗? 我的假设是EventMachine单独通常不足以构build完整的Web应用程序堆栈。 如果是这样的话,Ruby中的其他库还能提供非阻塞IO(即用于数据库/文件系统/ http访问)?

为什么不是这个简单的节点程序非阻塞?

我已经安装了节点,正在运行一些简单的“hello world”风格程序,以便更好地掌握正在发生的事情。 我很困惑,为什么下面的代码似乎以阻塞的方式运行。 当我在5秒钟后打开我的浏览器到本地主机:8080“进程启动…”和“进程完成”。 出现在屏幕上。 我期望“stream程开始…”立即出现,然后“stream程完成”。 5秒钟之后。 任何想法,为什么超时会影响这两个代码段? 这段代码保存在一个名为“hello.js”的文件中,我只需要使用“node hello.js”来运行。 var http = require('http'); http.createServer(function(request,response) { response.writeHead(200); response.write("Process started…"); setTimeout(function() { response.write("Process complete."); response.end(); }, 5000); }).listen(8080);