91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nodejs中stream和pipe機制怎么實現

發布時間:2021-07-07 09:52:06 來源:億速云 閱讀:122 作者:小新 欄目:web開發

這篇文章給大家分享的是有關nodejs中stream和pipe機制怎么實現的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

通過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中間進行處理

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

var through3 = require('through3');
var stream = through3(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 through3 = require('through3');
var fs = require('fs');
var tr = trumpet();
var stream = tr.select('.loud').createStream();
var upper = through3(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自身可以被拆分、合并、過濾

感謝各位的閱讀!關于“nodejs中stream和pipe機制怎么實現”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山丹县| 大连市| 稻城县| 汉中市| 凭祥市| 郯城县| 新郑市| 弋阳县| 竹北市| 青州市| 甘德县| 南靖县| 措美县| 怀来县| 凤山县| 大庆市| 文山县| 连南| 灵武市| 宁安市| 连江县| 夏邑县| 龙南县| 双鸭山市| 湘西| 甘肃省| 油尖旺区| 阿巴嘎旗| 安泽县| 萨迦县| 蒙阴县| 巴林右旗| 仁布县| 镇远县| 泌阳县| 馆陶县| 镇巴县| 平泉县| 汉源县| 阜南县| 德令哈市|