CNode

对于nodejs中相似模块的思考

Ccattail2012发布于14 年前最后回复14 年前5 回复8372 浏览0 收藏

今天遍历完了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)

L
leizongmin#1·14 年前

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

C
cattail2012#2·14 年前
引用 leizongmin依赖关系应该是这样吧: http == net == stream == Buffer

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

J
jiyinyiyong#3·14 年前
引用 leizongmin依赖关系应该是这样吧: http == net == stream == Buffer

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

L
leizongmin#4·14 年前
引用 leizongmin依赖关系应该是这样吧: http == net == stream == Buffer

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

C
coding#5·14 年前

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等。。。

参与回复
登录后即可参与回复。登录