国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
    主站蜘蛛池模板: 国产在线视欧美亚综合 | 在线观看国产亚洲 | 日韩欧美在线观看视频 | 欧美妞干网 | 国产在线一区二区三区欧美 | 国产成人精品三级在线 | 欧美韩日在线 | 欧美亚洲另类在线观看 | 欧美亚洲综合另类 | 日韩欧美国产精品第一页不卡 | 国产伊人久久 | 国产成人三级经典中文 | 久久激情综合网 | 亚洲精品福利在线观看 | 免费国产小视频在线观看 | 一区二区国产在线观看 | 亚洲高清视频一区 | 精品一区二区三区在线成人 | 性欧美大战久久久久久久野外黑人 | 九九久久99综合一区二区 | 日韩精品在线视频观看 | 免费一级a毛片在线播放直播 | 中文字幕一区久久久久 | 婷婷在线视频观看 | 亚洲久热| 国产精品区一区二区三 | 亚洲国产精品成人久久 | 国产第十页 | 美女视频黄a视频免费全过程在线 | 欧美在线看欧美视频免费网站 | 欧美日韩国产精品 | 欧美伊人久久大香线蕉综合69 | 国产日韩欧美亚洲综合在线 | 97伊人久久 | 欧美在线观看一区二区 | 欧美极品一区 | 日韩一区二区三区在线 | 久久久视 | 国产成人精品.一二区 | 91精品国产品国语在线不卡 | 亚洲高清视频一区 |