最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松創(chuàng)建nodejs服務(wù)器(8):非阻塞是如何實(shí)現(xiàn)的

 更新時(shí)間:2014年12月18日 11:08:18   投稿:junjie  
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(8):非阻塞是如何實(shí)現(xiàn)的,本文著重分析非阻塞的實(shí)現(xiàn),對(duì)代碼進(jìn)行了分解,需要的朋友可以參考下

這節(jié)我們來了解一下nodejs實(shí)現(xiàn)非阻塞操作的方法。

我們先來修改一下 start的處理程序:

復(fù)制代碼 代碼如下:

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;

這段代碼,創(chuàng)建了一個(gè)新的變量content(初始值為“empty”),執(zhí)行“l(fā)s -lah”命令,將結(jié)果賦值給content,最后將content返回。

我們引入了一個(gè)新的Node.js模塊,child_process,之所以用它,是為了實(shí)現(xiàn)一個(gè)既簡單又實(shí)用的非阻塞操作:exec()。

那么exec()做了什么呢?

它從Node.js來執(zhí)行一個(gè)shell命令。在上面的例子里,我們用它來獲取當(dāng)前目錄下所有的文件(“l(fā)s -lah”),然后,當(dāng)/startURL請(qǐng)求的時(shí)候?qū)⑽募畔⑤敵龅綖g覽器中。

我們啟動(dòng)服務(wù)器,訪問“http://localhost:8888/start”我們會(huì)發(fā)現(xiàn)頁面輸出的內(nèi)容是 empty。

exec()發(fā)揮作用了,有了它,我們可以執(zhí)行非常耗時(shí)的shell操作而無需迫使我們的應(yīng)用停下來等待該操作。

雖然如此,但是頁面輸出的內(nèi)容似乎不是我們想要的結(jié)果。

我們來分析一下原因:

我們的代碼是同步執(zhí)行的,這就意味著在調(diào)用exec()之后,Node.js會(huì)立即執(zhí)行 return content ;

在這個(gè)時(shí)候,content仍然是“empty”,因?yàn)閭鬟f給exec()的回調(diào)函數(shù)還未執(zhí)行到——因?yàn)閑xec()的操作是異步的。

下一節(jié)我們將介紹如何解決這個(gè)問題。

相關(guān)文章

  • node.js中的fs.fsync方法使用說明

    node.js中的fs.fsync方法使用說明

    這篇文章主要介紹了node.js中的fs.fsync方法使用說明,本文介紹了fs.fsync的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 使用Koa實(shí)現(xiàn)一個(gè)獲取視頻播放地址的接口

    使用Koa實(shí)現(xiàn)一個(gè)獲取視頻播放地址的接口

    在本節(jié)課中,我們將學(xué)習(xí)如何使用 Koa 實(shí)現(xiàn)一個(gè)獲取視頻播放地址的接口,我們將創(chuàng)建一個(gè)控制器,通過視頻 ID 獲取播放地址,并設(shè)置相應(yīng)的路由,最后,我們將使用 Postman 進(jìn)行測試,感興趣的朋友可以參考下
    2024-05-05
  • 用C/C++來實(shí)現(xiàn) Node.js 的模塊(二)

    用C/C++來實(shí)現(xiàn) Node.js 的模塊(二)

    上篇文章的主要內(nèi)容講訴了用C/C++來實(shí)現(xiàn) Node.js 的模塊,本文更深一步繼續(xù)探討這個(gè)問題,有需要的朋友可以參考下
    2014-09-09
  • NodeJS制作爬蟲全過程(續(xù))

    NodeJS制作爬蟲全過程(續(xù))

    本文是接上篇NodeJS制作爬蟲全過程,是最上文的一個(gè)補(bǔ)充以及優(yōu)化,給需要的小伙伴參考下
    2014-12-12
  • 詳解Node.js中的Async和Await函數(shù)

    詳解Node.js中的Async和Await函數(shù)

    這篇文章主要介紹了Node.js中的Async和Await函數(shù)的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 基于socket.io+express實(shí)現(xiàn)多房間聊天

    基于socket.io+express實(shí)現(xiàn)多房間聊天

    本文給大家分享的是使用node.js,基于socket.io+express實(shí)現(xiàn)多房間聊天的代碼,非常的實(shí)用,有需要的小伙伴可以來參考下
    2016-03-03
  • Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    這篇文章主要為大家介紹了Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • node基于async/await對(duì)mysql進(jìn)行封裝

    node基于async/await對(duì)mysql進(jìn)行封裝

    這篇文章主要介紹了node基于async/await對(duì)mysql進(jìn)行封裝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • nvm使用和nodejs切換版本詳細(xì)圖文教程

    nvm使用和nodejs切換版本詳細(xì)圖文教程

    nvm 是node version manager(node 版本管理工具)的縮寫,是一個(gè)命令行工具,用于管理和切換到不同版本的 node.js,下面這篇文章主要給大家介紹了關(guān)于nvm使用和nodejs切換版本的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Node中完整的?node?addon?實(shí)現(xiàn)流程

    Node中完整的?node?addon?實(shí)現(xiàn)流程

    這篇文章主要介紹了Node中完整的node?addon實(shí)現(xiàn)流程,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

保康县| 井陉县| 乐亭县| 英德市| 新邵县| 莎车县| 隆尧县| 龙川县| 交口县| 昌邑市| 托里县| 缙云县| 八宿县| 富裕县| 六安市| 宜丰县| 景泰县| 景德镇市| 都兰县| 洮南市| 隆尧县| 大丰市| 沂水县| 大洼县| 沙河市| 保亭| 新宾| 平远县| 临海市| 海宁市| 社旗县| 北京市| 纳雍县| 海淀区| 西昌市| 宁国市| 平塘县| 崇礼县| 洪江市| 城固县| 准格尔旗|