轻松创建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读取memcache示例分享
Jan 02 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 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
PHP脚本的10个技巧(4)
2006/10/09 PHP
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
javascript闭包入门示例
2014/04/30 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JS中Location使用详解
2015/05/12 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
javaScript之split与join的区别(详解)
2017/11/08 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python爬虫增加访问量的方法
2019/08/22 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
python logging模块的使用
2020/09/07 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
房产继承公证书
2014/04/09 职场文书
初三开学计划书
2014/04/27 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
实习单位意见
2015/06/04 职场文书
警示教育片观后感
2015/06/17 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL