Мой сервер nodejs аварийно падает в реальном времени (и всегда на веб-стресс-инструменте с запросом потока 10+). Ниже приведен код, который, по моему мнению, является основной причиной.Авария NodeJS с несколькими запросами
main.js
--------
app = express():
---------
app.get('/image/*', actions.download);
actions.js
var request = require('request');
exports.download = function(req, res){
var url = <Amazon s3 URL>;
req.pipe(request(url)).pipe(res);
};
Когда сервер выходит из строя, я получаю ниже ошибки в поЬир
stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: socket hang up
at createHangUpError (http.js:1476:15)
at Socket.socketOnEnd [as onend] (http.js:1572:23)
at Socket.g (events.js:180:16)
at Socket.emit (events.js:117:20)
at _stream_readable.js:943:16
at process._tickCallback (node.js:419:13)
Подробный журнал, когда я попытался с sudo NODE_DEBUG=net node main.js
и подвергал стресс-тест с 10 нитями
NET: 3017 Socket._read readStart
NET: 3017 afterWrite 0 { domain: null, bytes: 335, oncomplete: [Function: afterWrite] }
NET: 3017 afterWrite call cb
NET: 3017 onread ECANCELED 164640 4092 168732
NET: 2983 got data
NET: 2983 onSocketFinish
NET: 2983 oSF: not ended, call shutdown()
NET: 2983 destroy undefined
NET: 2983 destroy
NET: 2983 close
NET: 2983 close handle
Error: read ECONNRESET
at errnoException (net.js:904:11)
at TCP.onread (net.js:558:19)
Сколько запросов на секунду? –
Запросы берут около 100 ~ 300 мс. Я получил эту работу безупречно, изменив 'req.pipe (request (url)). Pipe (res)' to 'request (url) .pipe (res)' Начальная реализация была основана на [request] (https://github.com/request/request). Он работает для нормальных условий, но сбой сервера, когда есть пул одновременных запросов. Хотите знать, правильно ли исправление, даже если проблема решена! – sujithkrishnan