有个疑问

来源:8-4 stream演示(1)

小学生6年级

2019-05-07

看了 pipe(res) 之后有点疑问. 是这样的, createServer 中的回调函数中一般来说我们需要 res.end, 或者说 res.send (官网上说实质上也是帮我们调用了 res.end). 那我看老师直接 pipe, 没有调用 res.end 客户端最后也能收到回复. 这里是因为 pipe 的 close 回调帮我们通知调用了 res.end 么?

此外,我还想了一种情况, 比如说 res.end 之后, createServer 中的回调函数不 return ,接着往下执行的话. 而下面又调用了 res.end 的话实际上是没用的. 还有如果长时间挂起不调用 res.end 的话,客户端也会长时间无法收到消息.

这种感觉像是服务器端帮忙挂起了这次的 http 请求, 先不回复,一旦有了 res.end 就回复,这样来看的话就是 pipe 帮我们调用了 res.end, 也就是这个函数就是关键了,调用了就返回这次 http 请求. 而回调函数则不一定结束, 也可以用来打点记录什么的, 但总之此时 res 和 req 已经都没用了. 上面是我个人的一些理解,想问下老师对不对, 或者说哪里有偏差?

另外, 似乎 request 这个模块作者要重写, 是哪里不好呢? 我经验太少了,想请教一下老师, 能稍微提一些看法吗, 谢谢.

写回答

1回答

双越

2019-05-07

  1. 你这样理解没问题,这是 stream 的内部机制

  2. 理解没问题

  3. request 是否重写,对于我们日常使用问题不大。我也没关注具体的细节原因,我还得去查一查。

0
0

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程