2016-11-29 29 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

當您在Node中發出請求時,有abort()方法。它會關閉你的請求流。

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

太棒了。謝謝! – hampusohlsson