dataStream和webjs最新开发机制的使用
发布于 8 年前 作者 willwen 5300 次浏览 最后一次编辑是 4 年前

今天(昨天)把之前为了解决webjs中的某些问题而写的一个工具抽取了出来,也顺便介绍一下它的用法和webjs的最新功能。

相信很多人都很喜欢到github上看一下node和第三方模块的代码,这些同学肯定有发现node的源码中,stream是“能懒则懒”,虽然在API文档中,对Stream模块的说明十分详细,但是当你真正require(‘stream’)的时候,你就要想哭了。模块中返回的构造函数中,只有一个最有特色的方法——pipe,其他都需要你去按照API文档自己开发Stream I/O。(这不坑爹么?!)
  当然,joyent这样做也是有他们的原因的。在node内部,使用Stream机制的东西还真不少,STDIO, HTTP/HTTPS, File System, Zlib,大家不难发现这几个模块的共同点吧,就是都需要借助底层C++的驱动,让数据随线程流动起来。于是乎,在JavaScript编写的程序中,就很难做到异步数据输出这一点。但其实非也,就以CSS Engine来说,可以在每完成一个Rule的编译的时候,就把这段CSS输出到Stream中。 那么有人会问,我的dataStream是干嘛用的,其实这个模块原本是在webjs中实现的一个Stream框架,用于解决webjs上的某些结构问题,而现在我也用它给webjs开发了一个Response Pipelining机制,就是需要用到dataStream进行运作的。
  dataStream基本上实现了Writable/Readable Stream的方法和事件,为了照顾中文数据,我并没有直接使用Buffer,而是使用了好机油小田亲的bufferhelper。提供了两套处理方案。

安装

像平常一样的安装方法。
npm install dataStream

使用

var dataStream = require('dataStream');
var MyStream = new dataStream();

我们还可以这样

var MyStream = new dataStream({ readable: false });
MyStream.on('complate', function () {
    var body = this.body().toString();
    body += 'somechanges';
    this.emit('data', body);
});
readFileStream.pipe(MyStream).pipe(process.stdout);

以上代码是在全部数据读取完成以后再进行处理。

如果是要做到真正的pipe,你可以这样做。

var MyStream = new dataStream({
    data: function (chunk) {
        return chunk.toString() + 'data';
    }
});
4 回复

和普通的Stream有什么差别?

还是看不明白这东西到底有什么作用?貌似有形无实的东西,求小问哥给出更多相关的应用

@suqian @leizongmin 还没写完。。没时间啊。。这个主要是把Stream给封装一下,原生的Stream是啥都没有的。。源代码

哈哈哈,原生的就一裸奔的~

回到顶部