Avevo il requisito di creare un'API REST in node.js e stavo cercando un framework più leggero di express.js che probabilmente evitasse le funzionalità indesiderate e agisse come un framework personalizzato per la creazione di API REST. Restify dalla sua introduzione è consigliato per lo stesso caso.
Lettura Perché usare restify e non express? sembrava che il restify fosse una buona scelta.
Ma la sorpresa è arrivata quando ho provato entrambi con un carico.
Ho creato un'API REST di esempio su Restify e l'ho riempita con 1000 richieste al secondo. Sorpresa per me il percorso ha iniziato a non rispondere dopo un po '. La stessa app costruita su express.js ha gestito tutto.
Attualmente sto applicando il carico all'API tramite
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();
}
I risultati che ho ottenuto sembrano sensati? E se è così express è più efficiente di restify in questo scenario? O c'è qualche errore nel modo in cui li ho testati?
aggiornato in risposta ai commenti
comportamento di restify
quando alimentato con un carico di oltre 1000 req.s interrompe l'elaborazione in appena 1 secondo ricevendo fino a 1015 req.s e poi non fa nulla. cioè. il contatore che ho implementato per il conteggio delle richieste in arrivo interrotte aumenta dopo 1015.
se alimentato con un carico anche di 100 req. al secondo ha ricevuto fino a 1015 e dopo non ha risposto.