Miałem wymóg zbudowania REST API w node.js i szukałem lżejszego frameworka niż express.js, który prawdopodobnie unika niechcianych funkcji i będzie działał jak niestandardowy framework do budowania API REST. W tym samym przypadku zalecana jest ponowna wersja z wprowadzenia.
Czytanie Po co używać restify a nie wyrażać? wydawało się, że restify to dobry wybór.
Ale niespodzianka przyszła, gdy wypróbowałem oba z obciążeniem.
Zrobiłem przykładowy REST API na Restify i zalałem go 1000 żądań na sekundę. Zaskoczyło mnie, że trasa po chwili zaczęła nie odpowiadać. Ta sama aplikacja oparta na express.js obsługuje wszystkie pliki.
Obecnie stosuję obciążenie do interfejsu API za pośrednictwem
var FnPush = setInterval(function() {
for(i=0;i<1000;i++)
SendMsg(makeMsg(i));
}, 1000);
function SendMsg(msg) {
var post_data = querystring.stringify(msg);
var post_options = {
host: target.host,
port: target.port,
path: target.path,
agent: false,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
"connection": "close"
}
};
var post_req = http.request(post_options, function(res) {});
post_req.write(post_data);
post_req.on('error', function(e) {
});
post_req.end();
}
Czy wyniki, które otrzymałem, wydają się rozsądne? A jeśli tak, to czy ekspres jest bardziej wydajny niż ponowna weryfikacja w tym scenariuszu? A może jest jakiś błąd w sposobie ich testowania?
zaktualizowane w odpowiedzi na komentarze
zachowanie restify
gdy był karmiony obciążeniem większym niż 1000 wymagań, przestał przetwarzać w ciągu zaledwie 1 sekundy, odbierając do 1015 wymagań, a następnie nic nie robiąc. to znaczy. licznik, który wdrożyłem do zliczania przychodzących żądań, zatrzymał przyrost po 1015.
przy obciążeniu nawet 100 razy. na sekundę otrzymywał do 1015 i potem przestał odpowiadać.