如何在节点中关闭无界和管道流请求?

时间:2016-11-29 20:30:58

标签: javascript node.js http piping

我的node / express应用程序有一个端点,它代理来自内部服务的数据流,该服务使用服务器发送的事件。这意味着内部服务将继续在永恒中传输数据,直到连接关闭。

效果很好,但是当浏览器关闭与我的节点应用程序的连接时,与内部服务的管道连接保持打开状态,导致内部服务有大量打开/未使用的连接。

所以我试图在节点连接关闭时强制关闭管道连接,但似乎无法弄清楚如何做到这一点。

代码看起来像这样。使用request/request库进行管道处理。

import request from 'request';

app.get('/stream', (req, res) => {
  const stream = request.get({
    url: 'https://internalservice.acme.com/stream'
  })
  stream.on('error', console.log);
  stream.pipe(res);
  // When browser closes...
  req.on('close', () => {
      // ...close connection to internal service
      stream.destroy() // <-- doesn't work
  });
});

1 个答案:

答案 0 :(得分:1)

当您在Node中发出请求时,会有abort()方法。它会关闭您的请求流。

req.on('close', () => {
  // ...close connection to internal service
  stream.abort()
});