对于nodejs中相似模块的思考
发布于 12 年前 作者 cattail2012 6948 次浏览 最后一次编辑是 8 年前

今天遍历完了nodejs.org/api,对于其中的某些模块之间的关联有一些自己的思考,如果有错误希望指正。

Buffer和Stream模块的异同。 Buffer和Stream模块都有对数据读写的操作。然而Buffer更加注重底层,对数据以“小单位“(如byte)方式读写。而Stream则是通过时间驱动的方式,“大批量“读写数据。

net,UDP,http,https模块的异同。 net和UDP以传输层角度操作,而http等则以应用层角度操作。 net和UDP通过对他们特有的socket进行操作,完成数据传输。而http通过对request,response这些Stream对象的操作,完成数据传输。

5 回复

依赖关系应该是这样吧: http ==> net ==> stream ==> Buffer

恩,逻辑上来讲是这样的。只是我觉得由于javascript对类,接口以及抽象类等支持不太好,导致一些类直接的继承关系有点模糊,在文档中也没有解释清楚,有点晕乎乎的

用到两次是下载文件的 fs.readFile file, f(){}
和发送 http 请求的 res.on('data',f(){})
不过弄得有点糊涂… buffer 和 stream 是 Node 上边全部传送数据的方式了?

@jiyinyiyong 大概是:Node.js里面只有buffer才能存储字节数据呐,而stream最终要传输的也是字节数据,所以得依赖buffer了;而一般所指的传送数据,都是指读写文件/网络访问等IO操作,是以字节流为基础的。Node.js中的fs,net,http等模块都依赖stream

JS层面的stream module是纯粹JavaScript实现的,没有对应的native实现。 (native层面也有stream的概念,不过与stream module无关) 而且这个stream module也不会染指buffer的管理。

再说buffer module,这个是有native实现的,最终在v8之外的heap上分配了空间(malloc/realloc)

network方面,如1楼所言,http module依赖net module,除了http parser用到了native library,没有其他native代码,全靠net module。当然http module也依赖dns,用的是c-ares DNS library。

如果是https,不直接依赖net,而是依赖http与tls,tls依赖net与crypto等。。。

回到顶部