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

 更新时间:2014年12月18日 11:08:18   投稿:junjie  
这篇文章主要介绍了轻松创建nodejs服务器(8):非阻塞是如何实现的,本文着重分析非阻塞的实现,对代码进行了分解,需要的朋友可以参考下

这节我们来了解一下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()的操作是异步的。

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

相关文章

  • Node.js安装详细步骤教程(Windows版)详解

    Node.js安装详细步骤教程(Windows版)详解

    这篇文章主要介绍了Node.js安装详细步骤教程(Windows版),本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 说说如何利用 Node.js 代理解决跨域问题

    说说如何利用 Node.js 代理解决跨域问题

    这篇文章主要介绍了Node.js代理解决跨域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Nodejs读取文件时相对路径的正确写法(使用fs模块)

    Nodejs读取文件时相对路径的正确写法(使用fs模块)

    本篇文章主要介绍了linux 环境 mysql写入中文报错的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Nodejs 数组的队列以及forEach的应用详解

    Nodejs 数组的队列以及forEach的应用详解

    这篇文章主要介绍了Nodejs 数组的队列以及forEach的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Dapr+NestJs编写Pub及Sub装饰器实战示例

    Dapr+NestJs编写Pub及Sub装饰器实战示例

    这篇文章主要为大家介绍了Dapr+NestJs编写Pub及Sub装饰器的实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Node.js利用js-xlsx处理Excel文件的方法详解

    Node.js利用js-xlsx处理Excel文件的方法详解

    这篇文章主要给大家介绍了关于Node.js利用js-xlsx处理Excel文件的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • nodejs+axios爬取html出现中文乱码并解决示例

    nodejs+axios爬取html出现中文乱码并解决示例

    这篇文章主要为大家介绍了nodejs+axios爬取html出现中文乱码示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Node多进程的实现方法

    Node多进程的实现方法

    我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能
    2022-08-08
  • 利用Mongoose让JSON数据直接插入或更新到MongoDB

    利用Mongoose让JSON数据直接插入或更新到MongoDB

    这篇文章主要给大家介绍了利用Mongoose让JSON数据直接插入或更新到MongoDB数据库的相关资料,文中详细介绍了配置Mongoose、创建目录及文件、插入数据,POST提交JSON增加一条记录以及询数据,取出刚增加的记录等内容,需要的朋友可以参考下。
    2017-05-05
  • Windows系统下使用Sublime搭建nodejs环境

    Windows系统下使用Sublime搭建nodejs环境

    最近在研究Nodejs开发,俗话说,工欲善其事,必先利其器,当然要找到一款用着顺手的编辑器作为开始。这里我们选择的是Sublime Text 3,除了漂亮的用户界面,最吸引我的就是它的插件扩展功能以及跨平台特性。
    2015-04-04

最新评论