最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js

来源:动视网 责编:小采 时间:2020-11-27 21:30:36
文档

轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js

轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js:这节我们来了解一下nodejs实现非阻塞操作的方法。 我们先来修改一下 start的处理程序: 代码如下: var exec = require(child_process).exec; function start() { console.log(Request handler 'start' was call
推荐度:
导读轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js:这节我们来了解一下nodejs实现非阻塞操作的方法。 我们先来修改一下 start的处理程序: 代码如下: var exec = require(child_process).exec; function start() { console.log(Request handler 'start' was call


这节我们来了解一下nodejs实现非阻塞操作的方法。

我们先来修改一下 start的处理程序:

代码如下:
var exec = require("child_process").exec;
function start() {
console.log("Request handler 'start' was called.");
var content = "empty";
exec("ls -lah", function (error, stdout, stderr) {
content = stdout;
});
return content;
}

function upload() {
console.log("Request handler 'upload' was called.");
return "Hello Upload";
}

exports.start = start;
exports.upload = upload;

这段代码,创建了一个新的变量content(初始值为“empty”),执行“ls -lah”命令,将结果赋值给content,最后将content返回。

我们引入了一个新的Node.js模块,child_process,之所以用它,是为了实现一个既简单又实用的非阻塞操作:exec()。

那么exec()做了什么呢?

它从Node.js来执行一个shell命令。在上面的例子里,我们用它来获取当前目录下所有的文件(“ls -lah”),然后,当/startURL请求的时候将文件信息输出到浏览器中。

我们启动服务器,访问“http://localhost:8888/start”我们会发现页面输出的内容是 empty。

exec()发挥作用了,有了它,我们可以执行非常耗时的shell操作而无需迫使我们的应用停下来等待该操作。

虽然如此,但是页面输出的内容似乎不是我们想要的结果。

我们来分析一下原因:

我们的代码是同步执行的,这就意味着在调用exec()之后,Node.js会立即执行 return content ;

在这个时候,content仍然是“empty”,因为传递给exec()的回调函数还未执行到——因为exec()的操作是异步的。

下一节我们将介绍如何解决这个问题。

文档

轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js

轻松创建nodejs服务器(8):非阻塞是如何实现的_node.js:这节我们来了解一下nodejs实现非阻塞操作的方法。 我们先来修改一下 start的处理程序: 代码如下: var exec = require(child_process).exec; function start() { console.log(Request handler 'start' was call
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top