我想通過restify服務器將上游http.IncomingMessage轉發給客戶端。這是我直到現在纔想到的。它提供轉發功能。但是我認爲這可能導致內存泄漏:處理條件未消耗的http.IncomingMessage
var server = restify.createServer()
server.get('/test', function(req, res, next) {
var upstreamReq = createUpstreamReq() // just creates a http.ClientRequest
upstreamReq.on('response', function(upstreamRes) {
if (upstreamRes.statusCode === 404) {
// (1) I guess this leaks the upstreamRes body ?
return next(new restify.errors.NotFoundError())
}
if (upstreamRes.statusCode !== 200) {
// (2) is there a better way than pipeing the response to /dev/null?
// I guess the advantage of this approach is that we can reuse the connection (not closed) ?
upstreamRes.pipe(fs.createWriteStream('/dev/null'))
return next(new restify.errors.InternalServerError())
}
res.setHeader('Content-Type', upstreamRes.header('Content-Type'))
res.setHeader('Content-Length', upstreamRes.header('Content-Length'))
upstreamRes.pipe(res)
return next()
})
upstreamReq.end()
})
- 我假定在上游
404
這個碼的情況下漏upstreamRes
體(1),因爲它從未消耗(無pipe(somewhere)
)? - 不應該泄漏
upstreamRes
正文的一個明顯的解決方案(2)是將其管道到/dev/null
。有沒有替代/更好的解決方案?
雖然措辭良好,但這是一個比特定問題更多的代碼審查。 – HeadCode
@HeadCode我改變它更接近一個問題。 –