节点js-连接池的http.request()问题

节点js-连接池的http.request()问题,第1张

节点js-连接池的http.request()问题

您必须消耗响应。

记住,在v0.10中,我们进入了streams2。这意味着

data
直到您开始寻找事件才发生。因此,您可以执行以下 *** 作:

http.createServer(function(req, res) {  // this does some I/O, async  // in 0.8, you'd lose data chunks, or even the 'end' event!  lookUpSessionInDb(req, function(er, session) {    if (er) {      res.statusCode = 500;      res.end("oopsie");    } else {      // no data lost      req.on('data', handleUpload);      // end event didn't fire while we were looking it up      req.on('end', function() {        res.end('ok, got your stuff');      });    }  });});

但是,不读取数据时不会丢失数据的流的另一面是,如果您不读取数据,它们 实际上
不会丢失数据!也就是说,它们开始处于暂停状态,您必须阅读它们才能取出所有内容。

因此,测试中发生的事情是,您发出了一堆请求并且 没有使用响应 ,然后套接字最终被Google杀死,因为什么也没发生,并假设您已经死亡。

在某些情况下, 不可能
使用传入的消息:也就是说,如果您没有

response
在请求上添加事件处理程序,或者完全
response
在服务器上编写并完成了消息而从未读取请求。在这种情况下,我们只是为您转储垃圾中的数据。

但是,如果您正在听

'response'
事件,则有责任处理该对象。
response.resume()
在第一个示例中添加一个,您将看到它以合理的速度进行。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5476961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存