Eu tinha o requisito de construir uma API REST em node.js e estava procurando uma estrutura mais leve do que express.js, que provavelmente evita os recursos indesejados e funcionaria como uma estrutura customizada para construir APIs REST. Restify de sua introdução é recomendado para o mesmo caso.
Leitura Por que usar restify e not express? parecia que restify é uma boa escolha.
Mas a surpresa veio quando experimentei ambos com carga.
Eu fiz uma API REST de amostra no Restify e a sobrecarreguei com 1000 solicitações por segundo. Surpreendeu-me a rota que começou a não responder depois de um tempo. O mesmo aplicativo criado em express.js tratava de tudo.
Atualmente, estou aplicando a carga à API via
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();
}
Os resultados que obtive parecem razoáveis? E em caso afirmativo, expressar é mais eficiente do que restificar neste cenário? Ou há algum erro na maneira como os testei?
atualizado em resposta aos comentários
comportamento de restificar
quando alimentado com uma carga de mais de 1000 req.s, ele parou de processar em apenas 1 segundo recebendo até 1015 req.s e depois não fez nada. ie. o contador que implementei para contar as solicitações de entrada interrompeu o incremento após 1015.
quando alimentado com uma carga de até 100 reqs. por segundo, ele recebeu até 1015 e não respondeu depois disso.