<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn)

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:32:54
        文檔

        理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn)

        理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn):前言 前幾天別人請(qǐng)教我關(guān)于pipe的問(wèn)題,我發(fā)現(xiàn)我雖然用了nodejs很久,但是由于每次用的不多所以經(jīng)常回避stream的使用,導(dǎo)致一直不熟,現(xiàn)在重新學(xué)習(xí)整理一下相關(guān)知識(shí)。 通過(guò)nodeschool學(xué)習(xí)stream nodeschool有一個(gè)stream-adventure教程教導(dǎo)s
        推薦度:
        導(dǎo)讀理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn):前言 前幾天別人請(qǐng)教我關(guān)于pipe的問(wèn)題,我發(fā)現(xiàn)我雖然用了nodejs很久,但是由于每次用的不多所以經(jīng)常回避stream的使用,導(dǎo)致一直不熟,現(xiàn)在重新學(xué)習(xí)整理一下相關(guān)知識(shí)。 通過(guò)nodeschool學(xué)習(xí)stream nodeschool有一個(gè)stream-adventure教程教導(dǎo)s

        前言

        前幾天別人請(qǐng)教我關(guān)于pipe的問(wèn)題,我發(fā)現(xiàn)我雖然用了nodejs很久,但是由于每次用的不多所以經(jīng)常回避stream的使用,導(dǎo)致一直不熟,現(xiàn)在重新學(xué)習(xí)整理一下相關(guān)知識(shí)。

        通過(guò)nodeschool學(xué)習(xí)stream

        nodeschool有一個(gè)stream-adventure教程教導(dǎo)stream的使用,很簡(jiǎn)單

        簡(jiǎn)單stream進(jìn)行pipe

        首先,我們可以通過(guò)管道將輸入定位到輸出,輸入輸出可以是控制臺(tái)或者文件流或者h(yuǎn)ttp請(qǐng)求,比如

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

        pipe中間進(jìn)行處理

        如果我們想要在管道中間進(jìn)行處理,比如想將輸入的字符串變成大寫(xiě)寫(xiě)到輸出里,我們可以使用一些可以作為中間處理的框架,比如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轉(zhuǎn)化成普通回調(diào)

        當(dāng)我們輸入是流,而輸出是個(gè)普通函數(shù),我們需要把輸入流轉(zhuǎn)化為普通的buffer,這時(shí)可以試用concat-stream庫(kù)

        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框架實(shí)現(xiàn)了如下功能,將一個(gè)流pipe到request請(qǐng)求中,然后將流的內(nèi)容發(fā)給服務(wù)器,然后返回作為流供其他代碼使用,實(shí)現(xiàn)如下

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

        分支管道

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

        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一樣使用,下邊這個(gè)例子實(shí)現(xiàn)了使用流的方式進(jìn)行子進(jìn)程調(diào)用

        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)
        }
        

        總結(jié)

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

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

        文檔

        理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn)

        理解nodejs的stream和pipe機(jī)制的原理和實(shí)現(xiàn):前言 前幾天別人請(qǐng)教我關(guān)于pipe的問(wèn)題,我發(fā)現(xiàn)我雖然用了nodejs很久,但是由于每次用的不多所以經(jīng)常回避stream的使用,導(dǎo)致一直不熟,現(xiàn)在重新學(xué)習(xí)整理一下相關(guān)知識(shí)。 通過(guò)nodeschool學(xué)習(xí)stream nodeschool有一個(gè)stream-adventure教程教導(dǎo)s
        推薦度:
        標(biāo)簽: pipe Nodejs stream
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專題
        Top
        主站蜘蛛池模板: 免费观看久久精彩视频| 有色视频在线观看免费高清在线直播| 国产成人免费ā片在线观看老同学| 特级淫片国产免费高清视频| 亚洲女子高潮不断爆白浆| 成年女人男人免费视频播放 | 亚洲人成网站看在线播放| 18禁美女黄网站色大片免费观看| 国产成人亚洲精品青草天美 | 九九美女网站免费| 亚洲av午夜福利精品一区| 日韩免费电影网站| 久久精品国产亚洲av日韩| 1000部拍拍拍18免费网站| 亚洲制服丝袜一区二区三区| 黄瓜视频影院在线观看免费| 亚洲日韩AV一区二区三区四区| 大陆一级毛片免费视频观看 | 中文字幕在线免费看| 久久精品国产亚洲一区二区| 四虎国产精品永久免费网址| 亚洲精品国产肉丝袜久久| 男人的好看免费观看在线视频| 亚洲精华液一二三产区| 久久久久久A亚洲欧洲AV冫| 日本人成在线视频免费播放| 亚洲国产综合精品| 国产一区视频在线免费观看| 两个人看的www免费高清| 亚洲精品中文字幕无码AV| 日韩人妻无码免费视频一区二区三区 | 看免费毛片天天看| 亚洲国产精品成人久久| 国产无人区码卡二卡三卡免费| 亚洲av无码成人影院一区| 国产亚洲无线码一区二区| 大学生一级毛片免费看| 黄网站色成年片大免费高清| 国产亚洲一区二区三区在线观看| 国产成人免费高清激情明星| 羞羞视频在线免费观看|