내 노드/익스프레스 애플리케이션은 서버 전송 이벤트를 사용하는 내부 서비스의 데이터 스트림을 프록시하는 엔드 포인트를 가지고 있습니다. 즉, 내부 서비스는 연결이 끊어 질 때까지 데이터를 영원히 계속 스트리밍합니다.노드에서 무제한 및 파이프 된 스트림 요청을 닫는 방법?
브라우저가 내 노드 앱에 대한 연결을 닫으면 내부 서비스에 대한 파이프 연결이 열려있어 내부 서비스에 많은/사용되지 않은 연결이 많이 발생합니다.
그래서 노드 연결이 닫힐 때 강제로 파이프 연결을 닫으려고 시도하지만이를 수행하는 방법을 파악할 수 없습니다.
코드는 다음과 유사합니다. 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
});
});
다운로드 할 파일을 스트리밍하지 않는 한 대신 'socket.io'를 사용 했습니까? – peteb
@peteb 그렇습니다.하지만 유스 케이스의 경우 SSE가 좋습니다. 어쨌든 고마워! – hampusohlsson