我是Node的新手。
在这样的设置中

server.on('request', function(request, response) {
  // the same kind of magic happens here!
});

我假设responsehttp.ServerResponse的一个实例。
但是我读过的一篇教程说:http.ServerResponseWritableStream

现在可写流和http.ServerResponse都有写方法; herehere

我的问题是,当我调用response.write时会调用哪个版本的write?一种来自http.ServerResponse或另一种来自可写流?

最佳答案

http.ServerResponse实现stream.Writable接口(interface)的版本,但不继承其实际实现。因此,当您调用response.write()时,您是在调用http.ServerResponse.write()而不是stream.Writable.write()



在内部,http.ServerResponse实际上是OutgoingMessage,它是Stream,并且提供 write() 。如果将此与 stream.Writable.write() 实现进行比较,则它们写入数据的方式将有所不同。



如果没有成为Node.js Foundation的一部分,我无法说出动机,但是仅从设计的角度来看,实现stream.Writable接口(interface)为开发人员提供了熟悉且通用的方法和事件集。另外,http.ServerResponse正在写入连接套接字(请参阅 OutgoingMessage._send() ),这不是stream.Writable.write()实现的一部分。
也许以下摘录提供了对基金会思考过程的一些见解

09-16 21:06