사용자가 파일을 업로드하고 다운로드 할 수있는 웹 응용 프로그램 기능이 있습니다. 익스프레스로 앱을 제공하지만 파일은 다른 서버에 저장되므로 요청을 해당 서버로 프록시 처리합니다. 여기에 request 라이브러리를 사용하여 프록시 코드는 :이 파일을 다운로드를 포함하여, 내 모든 요청에 대해 잘 작동대용량 파일 스트리밍으로 인해 서버가 중단됨
module.exports = function(req, res) {
req.headers['x-private-id'] = getId();
var url = rewriteUrl(req.url);
var newRequest = request(url, function(error) {
if (error) console.log(error);
});
req.pipe(newRequest).on('response', function(res) {
delete res.headers['x-private-id'];
}).pipe(res);
};
. 그러나 파일을 스트리밍 할 때 문제가 발생합니다. 스트리밍을하면 fancybox을 사용하여 video
태그를 사용하여 동영상을 표시한다는 의미입니다. 처음 몇 번 비디오가 잘 표시됩니다.
그러나 fancybox를 닫은 다음 충분한 시간 (구체적으로 5 번) 다시 열면 그 후에 작업이 종료됩니다. 비디오가 더 이상 나타나지 않습니다. Express 서버 전체가 중단되어 더 이상 요청을 처리 할 수 없습니다. 서버를 다시 시작하면 모든 것이 정상입니다. 내게는 프록시 요청의 소켓이 제대로 닫히지 않은 것처럼 보이지만 이유를 알 수 없습니다. 프록시 코드에 문제가 있습니까?
상자를 닫은 후에도 fancybox가 비디오를 백그라운드로 전송하고 있습니까? 브라우저의 디버깅 패널에서 네트워크 요청을 확인하십시오. 또한 URL을 다시 쓸 때 여전히 동일한 서버 호스트 및 포트를 가리 킵니까? – mscdex
처음에는 요청이 아직 열리지 않은 것처럼 보였습니다. 크롬은 그들이 끝났다고 말했다. 그러나 나는 그것이 가능하지 않았을지도 모른다라고 생각한다. 또한 요청이 다른 서버로 프록시되고 있습니다. – GJK
"동일한 서버"는 Express 서버가 아닌 동일한 원격 서버를 의미합니다. – mscdex