2016-11-29 4 views
1

내 노드/익스프레스 애플리케이션은 서버 전송 이벤트를 사용하는 내부 서비스의 데이터 스트림을 프록시하는 엔드 포인트를 가지고 있습니다. 즉, 내부 서비스는 연결이 끊어 질 때까지 데이터를 영원히 계속 스트리밍합니다.노드에서 무제한 및 파이프 된 스트림 요청을 닫는 방법?

브라우저가 내 노드 앱에 대한 연결을 닫으면 내부 서비스에 대한 파이프 연결이 열려있어 내부 서비스에 많은/사용되지 않은 연결이 많이 발생합니다.

그래서 노드 연결이 닫힐 때 강제로 파이프 연결을 닫으려고 시도하지만이를 수행하는 방법을 파악할 수 없습니다.

코드는 다음과 유사합니다. 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 
    }); 
}); 
+0

다운로드 할 파일을 스트리밍하지 않는 한 대신 'socket.io'를 사용 했습니까? – peteb

+0

@peteb 그렇습니다.하지만 유스 케이스의 경우 SSE가 좋습니다. 어쨌든 고마워! – hampusohlsson

답변

1

노드에서 요청할 때 abort() 메서드가 있습니다. 요청 스트림이 닫힙니다.

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

굉장합니다. 고맙습니다! – hampusohlsson