response.write - 它是从可写流还是从http.ServerResponse调用write?

时间:2017-02-01 19:40:15

标签: javascript node.js

我是节点新手。 在像这样的设置

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或一个来自可写流?

1 个答案:

答案 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类定义的接口。

     

虽然可写流的特定实例可能以各种方式不同,但所有可写流都遵循相同的基本使用模式