看《nodejs入门》,其中提到非阻塞,有一句代码不明白
发布于 12 年前 作者 zysam 5671 次浏览 最后一次编辑是 8 年前

exec(“find /”, { timeout: 10000, maxBuffer: 20000*1024 }, function (error, stdout, stderr) { response.writeHead(200, {“Content-Type”: “text/plain”}); response.write(stdout); response.end(); });

书上介绍"find /"将花费10s,但是我试验时运行很快,几乎试验不出“非阻塞”这个概念。我在想,是否“find /”的问题,根目录只有4个文件而已。难道仅是文件不够多,使得“find /”无需超时10s吗,只是几毫秒就完成了。如果真的是这种,这本书太不照顾新手了,用别的例子试验非阻塞岂非更好!

7 回复

你没仔细看书啊, 我记得那上面说, 根目录有海量文件!!

我觉得看书不够仔细,虽然node入门我看过之后都过了很久,但是很启蒙的一本书,其中的原话是这样的: 我们这里“ls -lah”的操作其实是非常快的(除非当前目录下有上百万个文件) ... 为了让效果更加明显,我们想象一个更耗时的命令: “find /”,它在我机器上需要执行1分钟左右的时间,然而,尽管在请求处理程序中,我把“ls -lah”换成“find /”,当打开/start URL的时候,依然能够立即获得HTTP响应 —— 很明显,当exec()在后台执行的时候,Node.js自身会继续执行后面的代码。并且我们这里假设传递给exec()的回调函数,只会在“find /”命令执行完成之后才会被调用。

嗯,我也觉得启蒙性很好,按书步骤,我大约知道一点commonJS模块,以后阅读别人的代码也容易些。但是这个例子用于入门阻塞,总感觉不妥,难道我得拷贝一些文件夹在根下,才能验证它?(不知道我这么理解对不对,文中的确没有提到)。别外一些,无关代码的细节问题,又占用不少学习时间。总而言之,不断验证,反复折腾,学习不易呀。@272121742,这个是你的QQ号吗?想向你请教些新手问题。。。

@zysam 87227650@163.com 这是我的QQ号,只要问题不难都能解决,难题得去找大神,我也在努力进阶中。

我也在这个地方遇到问题了,他说“会花 10 秒钟的时间才载入”,感觉这个十秒钟是按照:timeout: 10000,来的,所以个人认为是这个timeout没起作用,不知道同学这一个半月之后有没有更好的认识~嘿嘿~感谢赐教~

你用 exec(‘ping 0.0.0.0 -n 10’) 来测试

回到顶部