细节2:动手实现异步非阻塞。
发布于 11 年前 作者 zhs077 5280 次浏览 最后一次编辑是 8 年前

之前想要让线程睡眠几秒在继续执行,通常采用sleep()来实现。但是这样会打破nodejs异步非阻塞的机制。效率将会大大下降。 自己实现异步 利用var childProcess = require(‘child_process’);模块,假如我们有两个js文件 1为main.js 2为sleep.js。 步骤1: 子main.js里面添加代码

//非阻塞 function sleep(millSeconds) { var subProcess = childProcess.fork(__dirname + “/subProcess.js”); subProcess.on(‘message’, function () { subProcess.kill(); emitter.emit(“RequestEvent”, null, null); //开启请求服务器事件

});
subProcess.send(sleepTime);

}

步骤2: 在sleep.js里面添加代码: /用于创建睡眠的子进程/ function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < startTime + milliSeconds);

}

process.on(‘message’, function (milliSeconds) { sleep(milliSeconds); process.send({}); }); 完成,就这么简单。 process.send()可以附加很多信息。包括JSON串等

7 回复

为什么不直接也 setTimeout 函数呢… … 楼主的代码还是用 Markdown 标记起来吧, 看着太辛苦了 代码开头结尾用单行加上三个反引号就可以了

好的谢谢啊

用fork来sleep,总有种高射炮打蚊子的感觉。。

请问你有什么好办法吗

@zhs077

setTimeout,不是已经说了么,真为你捉鸡…

setTimeout搞定。

@myy settimeout有个问题,跑了一天后超时时间都乱套了,原来1500秒后来变成1秒了。你怎么看

回到顶部