CNode

细节2:动手实现异步非阻塞。

Zzhs077发布于14 年前最后回复14 年前7 回复6123 浏览0 收藏

之前想要让线程睡眠几秒在继续执行,通常采用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)

J
jiyinyiyong#1·14 年前

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

T
thynson#3·14 年前

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

Z
zhs077#4·14 年前
M
myy#5·14 年前
引用 thynson用fork来sleep,总有种高射炮打蚊子的感觉。。

@zhs077

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

J
JacksonTian#6·14 年前

setTimeout搞定。

Z
zhs077#7·14 年前
引用 thynson用fork来sleep,总有种高射炮打蚊子的感觉。。

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

参与回复
登录后即可参与回复。登录