我是节点新手。 在像这样的设置
server.on('request', function(request, response) {
// the same kind of magic happens here!
});
我认为response
是http.ServerResponse
的一个实例。
但我读到的一个教程说:http.ServerResponse
是WritableStream
。
现在可写流和http.ServerResponse
都有写入方法; here和here。
我的问题是,当我致电response.write
时会调用哪个版本的write
?一个来自http.ServerResponse
或一个来自可写流?
答案 0 :(得分:2)
http.ServerResponse
实现stream.Writable
接口的版本,但不继承其实际实现。因此,当您拨打response.write()
时,您正在呼叫http.ServerResponse.write()
而不是stream.Writable.write()
。
Class: http.ServerResponse
响应实现但不继承可写流接口。
在内部,http.ServerResponse
实际上是OutgoingMessage
,这是Stream,并提供write()
。如果将其与stream.Writable.write()
实现进行比较,那么他们编写数据的方式就不同了。
我还很好奇它在实现可写流时有什么好处,如果它使用自己的写例如等等? (来自下面的评论)
如果不是Node.js基金会的一员,我就无法说出动机,但是从设计的角度来看,实现stream.Writable
界面可以为开发人员提供熟悉且通用的方法和事件。 。此外,http.ServerResponse
正在写入连接套接字(请参阅OutgoingMessage._send()
),该套接字不属于stream.Writable.write()
实现的一部分。
也许下面的摘录提供了对基金会思想过程的一些见解
Writable Streams
所有可写流都实现了stream.Writable类定义的接口。
虽然可写流的特定实例可能以各种方式不同,但所有可写流都遵循相同的基本使用模式