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


Posted in NodeJs onDecember 18, 2014

这节我们来了解一下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 相关文章推荐
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
nodejs命令行参数处理模块commander使用实例
Sep 17 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 #NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 #NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 #NodeJs
轻松创建nodejs服务器(4):路由
Dec 18 #NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 #NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 #NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 #NodeJs
You might like
header导出Excel应用示例
2014/01/24 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
python判断字符串是否纯数字的方法
2014/11/19 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python进程间通信Queue实例解析
2018/01/25 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
python创建文本文件的简单方法
2020/08/30 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
晚宴邀请函范文
2014/01/15 职场文书
领导干部培训感言
2014/01/23 职场文书
小区门卫值班制度
2014/01/24 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
工作表扬信范文
2015/01/17 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB