• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    理解nodejs的stream和pipe機制的原理和實現

    來源:懂視網 責編:小采 時間:2020-11-27 22:32:54
    文檔

    理解nodejs的stream和pipe機制的原理和實現

    理解nodejs的stream和pipe機制的原理和實現:前言 前幾天別人請教我關于pipe的問題,我發現我雖然用了nodejs很久,但是由于每次用的不多所以經常回避stream的使用,導致一直不熟,現在重新學習整理一下相關知識。 通過nodeschool學習stream nodeschool有一個stream-adventure教程教導s
    推薦度:
    導讀理解nodejs的stream和pipe機制的原理和實現:前言 前幾天別人請教我關于pipe的問題,我發現我雖然用了nodejs很久,但是由于每次用的不多所以經常回避stream的使用,導致一直不熟,現在重新學習整理一下相關知識。 通過nodeschool學習stream nodeschool有一個stream-adventure教程教導s

    前言

    前幾天別人請教我關于pipe的問題,我發現我雖然用了nodejs很久,但是由于每次用的不多所以經常回避stream的使用,導致一直不熟,現在重新學習整理一下相關知識。

    通過nodeschool學習stream

    nodeschool有一個stream-adventure教程教導stream的使用,很簡單

    簡單stream進行pipe

    首先,我們可以通過管道將輸入定位到輸出,輸入輸出可以是控制臺或者文件流或者http請求,比如

    process.stdin.pipe(process.stdout)
    process.stdin.pipe(fs.createWriteStream(path))
    fs.createReadStream(path).pipe(process.stdin)

    pipe中間進行處理

    如果我們想要在管道中間進行處理,比如想將輸入的字符串變成大寫寫到輸出里,我們可以使用一些可以作為中間處理的框架,比如through2就很方便

    var through2 = require('through2');
    var stream = through2(write,end)
    process.stdin
     .pipe(stream)
     .pipe(process.stdout);
    
    function write(line,_,next){
     this.push(line.toString().toUpperCase())
     next();
    })
    function end(done){
     done();
    })
    

    stream轉化成普通回調

    當我們輸入是流,而輸出是個普通函數,我們需要把輸入流轉化為普通的buffer,這時可以試用concat-stream庫

    var concat = require('concat-stream');
    
    var reverseStream=concat(function(text){
     console.log(text.toString().split("").reverse().join(""));
    })
    
    process.stdin.pipe(reverseStream)
    

    http server中的流

    類似stdin和fs,http由于其特性也適合使用流,所以其自帶類似特性

    var http = require('http');
    var server = http.createServer(function(req,res){
     req.pipe(res);
    })

    既作為輸入也作為輸出的流

    request框架實現了如下功能,將一個流pipe到request請求中,然后將流的內容發給服務器,然后返回作為流供其他代碼使用,實現如下

    var request = require('request');
    var r = request.post('http://localhost:8099');
    process.stdin.pipe(r).pipe(process.stdout)

    分支管道

    下邊是一個例子,這個例子將輸入管道中html包含loud class的元素放入另一個管道進行大寫操作,然后最后合并成輸出

    var trumpet = require('trumpet');
    var through2 = require('through2');
    var fs = require('fs');
    var tr = trumpet();
    var stream = tr.select('.loud').createStream();
    var upper = through2(function(buf,_,next){
     this.push(buf.toString().toUpperCase());
     next();
    })
    stream.pipe(upper).pipe(stream);
    process.stdin.pipe(tr).pipe(process.stdout);

    合并輸入輸出stream例子

    合并后的輸入輸出可像前文request一樣使用,下邊這個例子實現了使用流的方式進行子進程調用

    var spawn = require('child_process').spawn;
    var duplexer2 = require('duplexer2');
    
    module.exports = function(cmd, args){
     var c = spawn(cmd,args)
     return duplexer2(c.stdin,c.stdout)
    }
    

    總結

    通過上邊的例子,可以知道stream應該還有如何合并等更復雜的應用方式。總之整體上符合如下特性:

  • Stream分為readable、writeble
  • Stream通過pipe方法控制流向
  • httpServer和httpClient和file system和process.stdin\out\err通常可以作為stream
  • Stream可以被on(event)轉化為普通的變量,普通變量可以被write轉換成stream
  • Stream自身可以被拆分、合并、過濾
  • 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    理解nodejs的stream和pipe機制的原理和實現

    理解nodejs的stream和pipe機制的原理和實現:前言 前幾天別人請教我關于pipe的問題,我發現我雖然用了nodejs很久,但是由于每次用的不多所以經常回避stream的使用,導致一直不熟,現在重新學習整理一下相關知識。 通過nodeschool學習stream nodeschool有一個stream-adventure教程教導s
    推薦度:
    標簽: pipe Nodejs stream
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品高清在线| 日韩经典精品无码一区| 国产微拍精品一区二区| 久久夜色精品国产网站| 久久国产热这里只有精品| 国内精品51视频在线观看 | 久久精品亚洲日本波多野结衣 | 成人午夜精品网站在线观看| 在线精品自拍无码| 国产一区二区精品久久岳| 日本精品一区二区三区在线观看| 精品无码一区在线观看| 亚洲国产精品无码久久久蜜芽| 精品一久久香蕉国产线看播放| 99精品在线免费| 欧美精品华人在线| 99免费精品视频| 国产精品高清一区二区三区| 青青青国产精品一区二区| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 成人午夜视频精品一区| 欧美肥屁VIDEOSSEX精品| 人妻少妇精品视中文字幕国语| 亚洲综合国产精品第一页| 久久成人精品| 国产亚洲色婷婷久久99精品91| 国产精品狼人久久久久影院 | 国产精品无码国模私拍视频| 8050免费午夜一级国产精品| 久久精品国产影库免费看| 97久久精品午夜一区二区| 国产精品三级在线观看无码| 国产精品无圣光一区二区| 国产精品天干天干综合网| 精品国产a∨无码一区二区三区| 欧产日产国产精品精品| 久久发布国产伦子伦精品| 久久99国产综合精品免费| 国产一精品一AV一免费| xxx国产精品视频| 久久91精品久久91综合|